From 3f95f0be33c4da2f77227a86c59352eaa581f26e Mon Sep 17 00:00:00 2001 From: Sajjad Hashemian Date: Fri, 31 Mar 2023 16:08:42 +0330 Subject: [PATCH 01/11] wip --- .eslintrc.js => .eslintrc.cjs | 4 + build/gulpfile.js | 111 - dist/js/luge.cjs | 2 + dist/js/luge.cjs.map | 1 + dist/js/luge.modern.js | 2 + dist/js/luge.modern.js.map | 1 + dist/js/luge.module.js | 2 + dist/js/luge.module.js.map | 1 + dist/js/luge.umd.js | 2 + dist/js/luge.umd.js.map | 1 + dist/luge.umd.js | 2 + dist/luge.umd.js.map | 1 + package.json | 50 +- postcss.config.cjs | 5 + src/js/luge.js | 112 +- src/js/luge.umd.js | 41 + src/js/luge/core/Browser.js | 28 - src/js/luge/core/Core.js | 12 +- src/js/luge/core/Helpers.js | 23 + src/js/luge/core/LifeCycle.js | 4 +- src/js/luge/core/MouseObserver.js | 12 +- src/js/luge/core/Plugin.js | 6 +- src/js/luge/core/Polyfill.js | 58 - src/js/luge/core/ScrollObserver.js | 7 +- src/js/luge/core/Ticker.js | 2 +- src/js/luge/core/ViewportObserver.js | 6 +- src/js/luge/core/index.js | 75 + src/js/luge/plugins/Browser.js | 28 + src/js/luge/plugins/Cursor.js | 21 +- src/js/luge/plugins/Intersection.js | 23 +- src/js/luge/plugins/LottiePlayer.js | 43 +- src/js/luge/plugins/MouseAnimation.js | 29 +- src/js/luge/plugins/Parallax.js | 31 +- src/js/luge/plugins/Preloader.js | 22 +- src/js/luge/plugins/Reveal.js | 47 +- src/js/luge/plugins/ScrollAnimation.js | 29 +- src/js/luge/plugins/SmoothScroll.js | 23 +- src/js/luge/plugins/Transition.js | 52 +- yarn.lock | 11086 +++++++++++------------ 39 files changed, 5834 insertions(+), 6171 deletions(-) rename .eslintrc.js => .eslintrc.cjs (82%) delete mode 100644 build/gulpfile.js create mode 100644 dist/js/luge.cjs create mode 100644 dist/js/luge.cjs.map create mode 100644 dist/js/luge.modern.js create mode 100644 dist/js/luge.modern.js.map create mode 100644 dist/js/luge.module.js create mode 100644 dist/js/luge.module.js.map create mode 100644 dist/js/luge.umd.js create mode 100644 dist/js/luge.umd.js.map create mode 100644 dist/luge.umd.js create mode 100644 dist/luge.umd.js.map create mode 100644 postcss.config.cjs create mode 100644 src/js/luge.umd.js delete mode 100644 src/js/luge/core/Browser.js delete mode 100644 src/js/luge/core/Polyfill.js create mode 100644 src/js/luge/core/index.js create mode 100644 src/js/luge/plugins/Browser.js diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 82% rename from .eslintrc.js rename to .eslintrc.cjs index d61beb5..12a029d 100644 --- a/.eslintrc.js +++ b/.eslintrc.cjs @@ -7,6 +7,9 @@ module.exports = { env: { browser: true }, + plugins: [ + 'tree-shaking' + ], extends: [ 'standard' ], @@ -14,6 +17,7 @@ module.exports = { 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'no-this-before-super': 'off', 'no-unused-vars': 'off', + 'tree-shaking/no-side-effects-in-initialization': 2, 'space-before-function-paren': 'off' }, globals: { diff --git a/build/gulpfile.js b/build/gulpfile.js deleted file mode 100644 index 703e1ca..0000000 --- a/build/gulpfile.js +++ /dev/null @@ -1,111 +0,0 @@ -const path = require('path') -const gulp = require('gulp') - -const rollup = require('rollup') -const alias = require('@rollup/plugin-alias') -const { babel } = require('@rollup/plugin-babel') -const eslint = require('@rollup/plugin-eslint') -const { nodeResolve } = require('@rollup/plugin-node-resolve') -const replace = require('@rollup/plugin-replace') -const commonjs = require('@rollup/plugin-commonjs') -const { terser } = require('rollup-plugin-terser') - -const sass = require('gulp-sass')(require('node-sass')) -const sassGlob = require('gulp-sass-glob') -const autoprefixer = require('gulp-autoprefixer') - -const _package = require('../package.json') - -// Script -const rollupConfig = { - input: '../src/js/luge.js', - plugins: [ - eslint(), - alias({ - entries: [ - { find: 'Luge', replacement: path.resolve(__dirname, '../src/js/luge/') }, - { find: 'Core', replacement: path.resolve(__dirname, '../src/js/luge/core/') }, - { find: 'Plugins', replacement: path.resolve(__dirname, '../src/js/luge/plugins/') } - ] - }), - babel({ - babelHelpers: 'bundled', - exclude: [ - /node_modules/, - /\/core-js\// - ], - presets: [ - ['@babel/preset-env', { - targets: '> 1%, not dead', - corejs: { - version: '3.15.2', - proposals: true - }, - useBuiltIns: 'usage' - }] - ], - plugins: ['@babel/plugin-proposal-nullish-coalescing-operator'] - }), - nodeResolve(), - commonjs(), - replace({ - preventAssignment: true, - VERSION: JSON.stringify(_package.version) - }), - terser() - ] -} - -const writeUmd = { - file: '../dist/js/luge.js', - format: 'umd', - name: 'luge' -} - -const writeEsm = { - file: '../dist/js/luge.esm.js', - format: 'es', - name: 'luge' -} - -gulp.task('js', function (done) { - return rollup.rollup(rollupConfig) - .then(bundle => { - bundle.write(writeUmd) - bundle.write(writeEsm) - - done() - }) -}) - -gulp.task('js-dev', function (done) { - return rollup.rollup(rollupConfig) - .then(bundle => { - bundle.write({ ...writeUmd, sourcemap: true }) - - done() - }) -}) - -// Style -gulp.task('scss', function () { - return gulp.src('../src/scss/*.scss') - .pipe(sassGlob()) - .pipe(sass().on('error', sass.logError)) - .pipe(autoprefixer( - { - env: 'last 2 versions' - } - )) - .pipe(gulp.dest('../dist/css/')) -}) - -// Watch -gulp.task('watch', function () { - gulp.watch('../src/**/*.js', gulp.task('js-dev')) - gulp.watch('../src/**/*.scss', gulp.task('scss')) -}) - -// Default -gulp.task('default', gulp.series('js', 'scss')) -gulp.task('dev', gulp.series('js-dev', 'scss', 'watch')) diff --git a/dist/js/luge.cjs b/dist/js/luge.cjs new file mode 100644 index 0000000..a16c69d --- /dev/null +++ b/dist/js/luge.cjs @@ -0,0 +1,2 @@ +var e=require("virtual-scroll"),t=require("bowser/src/bowser.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/i(e),s=/*#__PURE__*/i(t),o=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),r=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),l=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),x=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),k=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),P=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),k.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),k.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:P.add.bind(P),remove:P.remove.bind(P)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:k.add.bind(k),nextTick:k.nextTick.bind(k),remove:k.remove.bind(k),tick:k.tick.bind(k)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle("load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/luge.modern.js b/dist/js/luge.modern.js new file mode 100644 index 0000000..bb8118c --- /dev/null +++ b/dist/js/luge.modern.js @@ -0,0 +1,2 @@ +import e from"virtual-scroll";import t from"bowser/src/bowser.js";class s{static isArray(e){return e&&"object"==typeof e&&Array.isArray(e)}static isObject(e){return e&&"object"==typeof e&&!Array.isArray(e)}static isString(e){return e&&"string"==typeof e}static mergeDeep(e,t){const i=Object.assign({},e);return s.isObject(e)&&s.isObject(t)&&Object.keys(t).forEach(o=>{s.isObject(t[o])?o in e?i[o]=s.isObject(e[o])&&s.isObject(t[o])?s.mergeDeep(e[o],t[o]):t[o]:Object.assign(i,{[o]:t[o]}):Object.assign(i,{[o]:t[o]})}),i}static toCamelCase(e){return s.isString(e)?e.replace(/(?:^\w|[A-Z]|\b\w)/g,(e,t)=>0===t?e.toLowerCase():e.toUpperCase()).replace(/\W+/g,""):e}static toUpperCamelCase(e){return s.isString(e)?(e=s.toCamelCase(e)).charAt(0).toUpperCase()+e.slice(1):e}static isInPage(e){return e!==document.body&&document.body.contains(e)}static deepFreeze(e){return Object.keys(e).forEach(t=>{"object"==typeof e[t]&&s.deepFreeze(e[t])}),Object.freeze(e)}static clamp(e,t,s){return Math.min(s,Math.max(t,e))}}var i=s,o=new class{constructor(){this.events=[]}on(e,t,s,i=!1){(this.events[e]||(this.events[e]=[])).push({cb:t,context:s,once:i})}once(e,t,s){this.on(e,t,s,!0)}emit(e){const t=this,s=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach((i,o)=>{i.cb.apply(i.context,s),i.once&&delete t.events[e][o]})}off(e,t){const s=this;this.events[e]&&this.events[e].forEach((i,o)=>{i.cb===t&&delete s.events[e][o]})}},l=new class{constructor(){this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(e=>{this.events[e]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}cycle(e){if(this.cycles[e]){this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e);for(const e in this.events)this.events[e].done=0;this.proceed(e)}}proceed(e){const t=this.cycles[e].events,s=this.cycles[e].current;if(s{this.do(e,t)}):this.do(e,i)}else this.debug&&console.log(e+" cycle ended")}next(e){const t=this,s=this.cycles[e].events,i=this.cycles[e].current;if(i1&&n.forEach(e=>{(0===t.events[e].done||t.events[e].done{o.callback===t&&o.cycle===s&&delete i.events[e].callbacks[l]})}do(e,t){this.events[t].done=0,this.events[t].callbacks.length>0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),o.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort((e,t)=>e.position-t.position).forEach(s=>{null===s.cycle||s.cycle===e?s.callback(()=>this.done(e,t)):this.done(e,t)})):this.done(e,t)}done(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),o.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)}enableDebug(e=!0){this.debug=e}},n=new class{constructor(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}setSettings(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))}siteInit(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()}bindEvents(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})}mouseHandler(e){const t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,o.emit("mouseMove",e)}resizeThrottle(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)}resizeHandler(){this.setCSSProperties(),o.emit("resize")}setCSSProperties(){const e=window.innerWidth;this.windowWidth!==e&&(this.windowWidth=e,this.clientWidth=document.body.clientWidth);const t=window.innerHeight;this.windowHeight!==t&&(this.windowHeight=t,this.clientHeight=document.body.clientHeight),requestAnimationFrame(()=>{document.documentElement.style.setProperty("--vw",.01*this.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*this.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*this.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*this.clientHeight+"px")})}scrollHandler(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,o.emit("scroll")}scrollStart(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),o.emit("scrollStart")}scrollEnd(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),o.emit("scrollEnd")}showCredits(){if(this.settings.credits.show){const e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,e+"font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}}};class r{constructor(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}beforeInit(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()}init(){this.setAttributes()}disabled(){return!!(n.settings[this.pluginSlug]||{}).disabled}setAttributes(){this.pluginAttributes={}}getAttributes(e){const t=this.pluginAttributes,s={};for(const o in t){const l=t[o];let n="lg-"+this.pluginSlug;"root"!==o&&(n+="-"+o),n=i.toCamelCase(n);const r=e.dataset[n];let a,d,c;"object"==typeof l?(a=l[0],c=l[1]):a=l,d=void 0===r&&void 0!==c?a(c):(void 0!==r||a!==Boolean)&&(void 0!==r?a===Boolean?"false"!==r:a(r):void 0),s[o]=d}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=s),s}}class a extends r{constructor(e){super("preloader"),this.luge=e,this.intro=!1,this.playerIn=!1,this.startTime=Date.now(),this.doneLoad=null,e.preloader={add:this.add.bind(this)}}init(){super.init(),this.el=document.querySelector("[data-lg-preloader]"),this.el&&(this.attributes=this.getAttributes(this.el),this.el.classList.add("lg-preloader","lg-preloader--"+this.attributes.root),this.initLottie(),this.luge.lifecycle.add("siteIn",this.siteIn.bind(this))),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this))}setAttributes(){this.pluginAttributes={root:[String,""],duration:[Number,this.luge._settings.preloader.duration],in:String,reverse:Boolean}}pageLoad(e){this.attributes&&"lottie"===this.attributes.root&&"object"==typeof lottie?this.doneLoad=e:e()}siteIn(e){const t=(Date.now()-this.startTime)/1e3,s=this.attributes.duration-t;if(s<=0){const t=this.clear.bind(this,e);if(this.playerIn)this.playerIn.play(),this.playerIn.addEventListener("complete",t,{once:!0});else if("function"==typeof this.intro)this.intro(e,this.remove.bind(this));else{const e=window.getComputedStyle(this.el).getPropertyValue("transition-duration");""!==e&&"0s"!==e?(this.el.addEventListener("transitionend",t,{once:!0}),this.el.classList.add("is-hidden")):t()}}else setTimeout(this.siteIn.bind(this,e),1e3*s)}clear(e){this.playerIn&&this.playerIn.destroy(),this.remove(),e()}remove(e){this.el.parentNode.removeChild(this.el),this.el=null}add(e){this.intro=e}initLottie(){const e=this;if("lottie"===this.attributes.root&&"object"==typeof lottie){const t=this.attributes.in;let s=!1;t&&(s=lottie.loadAnimation({container:this.el,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}}),this.attributes.reverse&&s.setDirection(-1)),s.addEventListener("DOMLoaded",()=>{e.attributes.reverse&&s.goToAndStop(s.totalFrames-1,!0),e.el.setAttribute("style",""),"function"==typeof e.doneLoad&&(e.doneLoad(),e.doneLoad=null)},{once:!0}),this.playerIn=s}}}class d extends r{constructor(e){super("reveal"),this.luge=e,this.elements=[],this.toRevealIn=[],this.toRevealOut=[],this.reveals={in:{},out:{}},this.canReveal=!1,this.onScrollProgress=this.onScrollProgress.bind(this),e.reveal={add:this.add.bind(this)}}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),11),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this)),this.bindEvents()}setAttributes(){super.setAttributes(),this.pluginAttributes={root:String,stagger:String,manual:[Boolean,!1],multiple:Boolean,delay:[Number,0]}}getAttributes(e){const t=super.getAttributes(e);return void 0!==t.stagger&&""===t.stagger?t.stagger=this.luge._settings.reveal.stagger:void 0===t.stagger&&(t.stagger=!1),t}bindEvents(){this.luge.emitter.on("resize",this.resizeHandler,this),this.luge.emitter.on("scroll",this.scrollHandler,this),this.luge.emitter.on("update",this.updateHandler,this)}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-reveal]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);if(!t.stagger&&null!==e.closest("[data-lg-reveal-stagger]"))return;const s=t.root;e.luge.reveal.name=i.toCamelCase(s),t.manual?(e.luge.reveal.in=()=>{this.revealCallback(e,e.luge.reveal.name,"in"),this.setRevealClasses(e,"is-in")},e.luge.reveal.out=()=>{this.revealCallback(e,e.luge.reveal.name,"out"),this.setRevealClasses(e,"is-out")}):(this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress)),e.luge.reveal.delay=1e3*t.delay,t.stagger?Array.from(e.children).forEach(e=>{const t=e.dataset.lgReveal;e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),(t||s)&&e.classList.add("lg-reveal--"+(null!=t?t:s)),e.dataset.lgRevealChild="",(e.luge||(e.luge={}))&&(e.luge.reveal={isRevealed:!1})}):(e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),s&&e.classList.add("lg-reveal--"+s)),this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.canReveal=!1,this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){const t=e.target,s=this.luge._settings.reveal.threshold;t.scrollProgress>=s&&t.scrollProgress<=1-s&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-s&&t.scrollEnd{e.scrollStart<0&&(this.toRevealIn.includes(e)||this.toRevealIn.push(e))}),this.revealElements(),e()}resizeHandler(){this.revealElements()}scrollHandler(){this.revealElements()}updateHandler(){this.addElements(),this.revealElements()}revealElements(){const e=this;if(this.canReveal){let t=0;this.toRevealIn.forEach(s=>{const o=i.toCamelCase(s.luge.reveal.root);t+=s.luge.reveal.delay,setTimeout(function(){e.revealCallback(s,o,"in"),s.luge.reveal.stagger?Array.from(s.children).forEach((t,l)=>{const n=i.toCamelCase(t.dataset.lgReveal);setTimeout(()=>{(n||o)&&e.revealCallback(t,null!=n?n:o,"in"),e.setRevealClasses(t,"is-in")},l*s.luge.reveal.stagger*1e3)}):e.setRevealClasses(s,"is-in")},t),t+=1e3*this.luge._settings.reveal.stagger,s.luge.reveal.multiple||e.removeElement(s)}),this.toRevealOut.forEach(t=>{const s=i.toCamelCase(t.luge.reveal.root);void 0!==t.luge.reveal.isRevealed&&e.revealCallback(t,s,"out");let o="";o=t.scrollProgress>.5?"is-out is-out-top":"is-out is-out-bottom",t.luge.reveal.stagger?Array.from(t.children).forEach((l,n)=>{const r=i.toCamelCase(l.dataset.lgReveal);setTimeout(()=>{(r||s)&&e.revealCallback(l,null!=r?r:s,"out"),e.setRevealClasses(l,o)},n*t.luge.reveal.stagger*1e3)}):e.setRevealClasses(t,o)}),this.toRevealIn=[],this.toRevealOut=[]}}setRevealClasses(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(t=>{e.classList.add(t)})}revealCallback(e,t,s){e.dispatchEvent(new CustomEvent("reveal"+s)),e.luge.reveal.isRevealed="in"===s,"function"==typeof this.reveals[s][t]?this.reveals[s][t](e):"function"==typeof e["onreveal"+s]&&e["onreveal"+s]()}add(e,t,s){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=s)}}class c extends r{constructor(e){super("transition"),this.luge=e,this.url=window.location.href,this.pathname=window.location.pathname,this.pageFetched=null,this.currentPage=null,this.reload=this.luge._settings.transition.reload,this.prevScrollTop=0,this.newScrollTop=0,this.transitions={in:{},out:{}},this.listeners={linkHandler:this.linkHandler.bind(this)},e.transition={add:this.add.bind(this)}}init(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")}bindLinksEvent(){document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(e=>{e.addEventListener("click",this.listeners.linkHandler)})}unbindLinksEvent(){document.querySelectorAll("a").forEach(e=>{e.removeEventListener("click",this.listeners.linkHandler)})}linkHandler(e){const t=e.currentTarget,s=t.getAttribute("href");if(s&&0!==s.indexOf("#")&&0!==s.indexOf("tel")&&0!==s.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===s.indexOf(window.location.origin)||0===s.indexOf("/")||-1===s.indexOf("/"))){if(e.preventDefault(),window.location.href===s)return;this.navigateTo(s),history.pushState(null,null,this.url)}}navigateTo(e){if(this.url=e,this.reload){const t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",t=>{window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")}pageInit(e){this.bindLinksEvent(),e()}initLoader(){const e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(()=>{e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){const t=e.getAttribute("data-lg-loader-out");let s=!1,i=e.getAttribute("data-lg-loader-in"),o=!1;t&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===i&&(i=t),i&&(o=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:i,rendererSettings:{preserveAspectRatio:"none"}}),i===t&&o.setDirection(-1)),e.playerOut=s,e.playerIn=o}}pageFetch(e){const t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(s){t.pageFetched=s,e()})}pageCreate(e){const t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),s=t.querySelector("[data-lg-page]");if(s){{this.currentPage.insertAdjacentElement("beforebegin",s),s.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{document.querySelector("head title").insertAdjacentElement("afterend",e)});const e=document.querySelector("head title"),i=t.querySelector("head title");e&&i&&(e.innerText=i.innerText)}window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url}pageKill(e){const t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()}pageOut(e){const t=this,s=document.querySelector("[data-lg-page]");if(s){const o=i.toCamelCase(s.getAttribute("data-lg-page"));let l=!1;if("function"==typeof this.transitions.out[o]?l=this.transitions.out[o]:"function"==typeof s.onpageout?l=s.onpageout:"function"==typeof this.transitions.out.default&&(l=this.transitions.out.default),l)l(s,e);else{const s=document.querySelector("[data-lg-loader]");if(s){if(s.playerOut)s.playerOut.stop(),s.playerOut.renderer.svgElement.style.opacity=1,s.playerOut.play(),s.playerOut.addEventListener("complete",()=>{t.reload||(s.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{const t=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==t&&"0s"!==t?s.addEventListener("transitionend",e,{once:!0}):e()}s.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)}pageIn(e){const t=document.querySelector("[data-lg-page]");if(t){const s=i.toCamelCase(t.getAttribute("data-lg-page"));let o=!1;if(t.style.opacity="","function"==typeof this.transitions.in[s]?o=this.transitions.in[s]:"function"==typeof t.onpagein?o=t.onpagein:"function"==typeof this.transitions.in.default&&(o=this.transitions.in.default),o)o(t,e);else{const t=document.querySelector("[data-lg-loader]");if(t&&t.classList.contains("is-visible"))if(t.playerIn)t.playerIn.stop(),t.playerIn.renderer.svgElement.style.opacity=1,"reverse"===t.getAttribute("data-lg-loader-in")?t.playerIn.goToAndPlay(t.playerIn.totalFrames,!0):t.playerIn.play(),t.playerIn.addEventListener("complete",()=>{t.playerIn.renderer.svgElement.style.opacity="",t.classList.remove("is-visible"),e()},{once:!0});else{const s=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==s&&"0s"!==s?t.addEventListener("transitionend",e,{once:!0}):e(),t.classList.remove("is-visible")}else e()}}else e()}historyStateChanged(){let e="";e=0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url),e.pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(()=>{this.newScrollTop=window.scrollY,window.scroll({top:this.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))}add(e,t="default",s){this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=s)}}class h extends r{constructor(e){super("scroll"),this.luge=e,this.elements=[],this.allowedProperties=["opacity","background-x","background-y"],this.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],this.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);const s={};s.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,s.yoyo=t.yoyo,s.inertia=t.inertia;let i=!1;if(void 0!==t.animate?i=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(i=this.presets[t.root]),i){const e={};for(const t in i)if(this.allowedProperties.includes(t)||this.transformProperties.includes(t)){const s=i[t];let o=String(s[0]),l=String(s[1]),n=o.match(/\d+([a-zA-Z%]+)/m);n?n=n[1]:0===t.indexOf("rotate")&&(n="deg"),o=Number(o.replace(n,"")),l=Number(l.replace(n,""));let r=t;"background-x"===t?r="background-position-x":"background-y"===t&&(r="background-position-y"),e[r]={from:o,to:l,current:o,unit:n}}s.properties=e}e.luge.scroll.animation=s,this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){e.target.luge.scroll.animation.atDest=!1}tick(){for(const e of this.elements){if(e.luge.scroll.animation.atDest)continue;let t=e.scrollProgress;if(e.luge.scroll.yoyo&&(t=1-Math.abs(1-2*t)),e.luge.scroll.animation.smoothProgress+=(t-e.luge.scroll.animation.smoothProgress)*(1-e.luge.scroll.inertia),e.luge.scroll.animation.properties){const t={};for(const[s,i]of Object.entries(e.luge.scroll.animation.properties))i.current=i.from+(i.to-i.from)*e.luge.scroll.animation.smoothProgress,["x","y","z"].includes(s)?(t.translate3d||(t.translate3d={}))&&(t.translate3d[s]=i.current+i.unit):t[s]=i.current+i.unit;const s=[];for(const[e,i]of Object.entries(t))if(this.transformProperties.includes(e)){if("object"==typeof i)if("translate3d"===e){const e=Object.assign({x:0,y:0,z:0},i);i.string=e.x+", "+e.y+", "+e.z}else i.string=Object.values(i).join(", ");s.push(e+"("+("object"!=typeof i?i:i.string)+")")}const i={},o=[];s.length>0&&(i.transform=s.join(" "),o.push("transform"));for(const[e,s]of Object.entries(t))this.transformProperties.includes(e)||(i[e]=s,o.push(e));for(const[t,s]of Object.entries(i))e.style.setProperty(t,s);e.style.setProperty("will-change",o.join(", "))}else{const t=Math.round(1e3*(e.scrollProgress-e.luge.scroll.animation.smoothProgress))/1e3;e.style.setProperty("--progress",e.luge.scroll.animation.smoothProgress),e.style.setProperty("--abs-diff",Math.abs(t)),e.style.setProperty("--diff",t)}Math.abs(t-e.luge.scroll.animation.smoothProgress)<1e-4&&(e.luge.scroll.animation.atDest=!0)}}}class u extends r{constructor(){super("smooth"),window.hasSmoothScroll=!1,window.isSmoothScrolling=!1}init(){if(super.init(),this.element=document.documentElement,this.hasSmooth=this.element.hasAttribute("data-lg-smooth"),this.hasSmooth){var t,s;window.hasSmoothScroll=!0,this.smoothScroll=window.scrollTop,this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,document.documentElement.classList.add("has-smooth-scroll");const i=(null==(t=navigator)||null==(t=t.userAgentData)?void 0:t.platform)||(null==(s=navigator)?void 0:s.platform)||"unknown";this.virtualScroll=new e({el:this.element,firefoxMultiplier:50,mouseMultiplier:i.indexOf("Win")>-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}}bindEvents(){this.luge.emitter.on("scroll",this.onScroll,this)}onScroll(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)}onVirtualScroll({deltaY:e,originalEvent:t}){const s=!!t.composedPath().find(e=>null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent"));t.ctrlKey||s||(this.targetScroll-=e,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)}tick(){const e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;const t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)}}class g extends r{constructor(e){super("cursor"),this.luge=e,this.cursors=[],this.pointers=[],this.trails=[],this.hoverTags=["a","button","input"]}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}}bindEvents(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})}pageInit(e){const t=this,s=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");s.length>0&&s.forEach(e=>{const s=this.getAttributes(e);s.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(e=>{e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.classList.add("lg-cursor-pointer"),t.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(e=>{const i=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=document.createElementNS("http://www.w3.org/2000/svg","path");i.appendChild(o),e.appendChild(i),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:o}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):s.length,e.classList.add("lg-cursor-trail"),t.trails.push(e)}),e.classList.add("lg-cursor"),this.cursors.push(e)}),e()}hoverHandler(e){const t=e.target,s=t.tagName.toLowerCase(),i=t.getAttribute("data-lg-hover");let o=null;(this.hoverTags.includes(s)||null!==i)&&(o="mouseenter"===e.type),null!==o&&this.cursors.forEach(e=>{e.classList.toggle("lg-cursor--hover",o),null!==i&&""!==i&&e.classList.toggle("lg-cursor--hover--"+i,o)})}tick(e){this.pointers.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+s.x+"px, "+s.y+"px, 0)"}),this.trails.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia;const i=e.luge.cursor.points;i.push({x:s.x,y:s.y}),i.length>e.luge.cursor.length&&i.shift();let o="",l=0;const n=(e,t)=>{const s=t.x-e.x,i=t.y-e.y;return{length:Math.sqrt(Math.pow(s,2)+Math.pow(i,2)),angle:Math.atan2(i,s)}},r=(e,t,s,i)=>{const o=n(t||e,s||e);l+=o.length;const r=o.angle+(i?Math.PI:0),a=.2*o.length;return[e.x+Math.cos(r)*a,e.y+Math.sin(r)*a]};o=((e,t)=>`${e.reduce((e,t,s,i)=>0===s?`M ${t.x},${t.y}`:`${e} ${((e,t,s)=>{const[i,o]=r(s[t-1],s[t-2],e),[l,n]=r(e,s[t-1],s[t+1],!0);return`C ${i},${o} ${l},${n} ${e.x},${e.y}`})(t,s,i)}`,"")}`)(i),e.luge.cursor.path.setAttribute("d",o),e.style.setProperty("--length",l)}})}}class p extends r{constructor(e){super("intersection"),this.luge=e,this.listeners={onViewportIntersect:this.onViewportIntersect.bind(this)}}init(){super.init(),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,class:String}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))}removeElement(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onViewportIntersect(e){const t=e.target,s=t.luge.viewport.position,i=!!t.luge.intersection.class&&t.luge.intersection.class.split(" ");t.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(t.classList.add("is-in"),i&&document.documentElement.classList.add(...i)):(i&&document.documentElement.classList.remove(...i),t.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))}}class m extends r{constructor(e){super("lottie"),this.luge=e,this.elements=[],this.doneLoad=null,this.onViewportIntersect=this.onViewportIntersect.bind(this),this.onScrollProgress=this.onScrollProgress.bind(this),e.lottie={deferInit:this.deferInit.bind(this)}}init(){super.init(),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()}deferInit(){"object"==typeof lottie&&(this.pageInit(()=>{}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())}setAttributes(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements(),this.reveal(()=>{})}pageLoad(e){let t=!1;this.elements.length>0&&this.elements.forEach(e=>{e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()}pageInit(e){this.addElements(),e()}addElements(){const e=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(t=>{if(!t.player){const s=this.getAttributes(t);this.luge.scrollobserver.add(t),s.lazy||(e.initPlayer(t),t.addEventListener("revealin",e.play)),t.addEventListener("viewportintersect",e.onViewportIntersect)}})}pageKill(e){const t=this;let s=[];const i=document.querySelector("[data-lg-page] + [data-lg-page]");s=i?i.querySelectorAll("[data-lg-lottie]"):this.elements,s.forEach(e=>{e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()}reveal(e){this.toAutoplay.forEach(e=>{"in"===e.viewportPosition&&e.play()}),e()}onViewportIntersect(e){const t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)}initLazy(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",()=>{e.play()},{once:!0})}initPlayer(e){const t=this;this.toLoad++;const s=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:s.renderer,loop:s.loop&&!s.reverse,autoplay:!1,path:s.root}),void 0!==s.subframe&&e.player.setSubframe(s.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),s.autoplay&&this.toAutoplay.push(e),s.required&&this.requireds++,s.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):s.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){const i=Math.round(e.player.currentFrame);1===e.player.playDirection?i===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(s.reverse?()=>{e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:()=>{e.player.goToAndPlay(s.loopFrame,!0)},this)):i===s.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(()=>{e.player.setDirection(1),e.player.goToAndPlay(s.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",()=>{e.classList.add("is-loaded"),t.playerLoaded(s.required)},{once:!0})}setPlayerStateClasses(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")}playerLoaded(e=!1){this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(()=>{this.luge.emitter.emit("resize")})}play(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))}pause(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))}stop(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))}onScrollProgress(e){const t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)}}class v extends r{constructor(e){super("mouse"),this.luge=e,this.elements=[],this.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))}removeElement(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}getMouseMovement(){const e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,s=Math.hypot(e,t);if(window.mouseSpeed+=.5*(s-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),s>1){const s=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=s,window.mouseDirection=s>=45&&s<135?"down":s>=135&&s<225?"left":s>=225&&s<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)}tick(){this.elements.forEach(e=>{const t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);const s=Math.round(1e3*(t.x-t.smoothX))/1e3,i=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(s)),e.style.setProperty("--diff-x",s),e.style.setProperty("--abs-diff-y",Math.abs(i)),e.style.setProperty("--diff-y",i)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})}}class b extends r{constructor(e){super("parallax"),this.luge=e,this.elements=[],this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.amplitude){const e=t.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.amplitude=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.amplitude)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}addElements(){document.querySelectorAll("[data-lg-parallax]").forEach(e=>{const t=this.getAttributes(e).disable;let s=!0;const i=(window.luge.browser||{}).is;t&&i&&("desktop"===t&&i("desktop")||"handheld"===t&&!i("desktop")||"mobile"===t&&i("mobile")||"tablet"===t&&i("tablet"))&&(s=!1),s&&this.addElement(e)})}addElement(e){this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(()=>{e.addEventListener("scrollprogress",this.onScrollProgress),this.moveElement(e)}))}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}onScrollProgress(e){this.moveElement(e.target)}moveElement(e){let t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2}tick(){this.elements.forEach(e=>{e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})}}class y{constructor(e){const s=document.documentElement,i=t.getParser(window.navigator.userAgent);s.classList.add("is-"+i.getPlatformType()),(i.is("mobile")||i.is("tablet"))&&s.classList.add("is-handheld"),i.is("Safari")&&(s.classList.add("is-safari"),s.classList.add("is-safari-"+i.getBrowserVersion())),e.browser=i}}var w=new class{constructor(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}init(e){this.createObserver(),e()}createObserver(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[n.settings.intersection.threshold]})}intersectionCallback(e){e.forEach(e=>{const t=e.target;let s="in";e.isIntersecting||(s=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==s&&(t.luge.viewport.position=s,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===s?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+s))))})}add(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))}remove(e){this.observer.unobserve(e)}},f=new class{constructor(){this.callbacks=[],this.onceCallbacks=[],n.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}add(e,t){let s=!1;this.callbacks.forEach(i=>{i.cb===e&&i.context===t&&(s=!0)}),s||this.callbacks.push({cb:e,context:t})}remove(e,t){const s=this;this.callbacks.forEach((i,o)=>{i.cb===e&&i.context===t&&delete s.callbacks[o]})}nextTick(e,t){this.onceCallbacks.push({cb:e,context:t})}_tick(e){const t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),n.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))}tick(e){const t=this;this.callbacks.forEach(t=>{t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach((s,i)=>{s.cb.apply(s.context,[e]),delete t.onceCallbacks[i]})}},E=new class{constructor(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),f.add(this.tick,this),this.bindEvents()}bindEvents(){o.on("mouseMove",this.mouseHandler,this),o.on("resize",this.resizeHandler,this),o.on("update",this.updateHandler,this),o.on("scroll",this.scrollHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],e()}init(e){this.getBoundingThrottle(),e()}resizeHandler(){this.getBoundingThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle()},this)}scrollHandler(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)}mouseHandler(){const e=this;this.elements.forEach(t=>{e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop}getBoundingThrottle(){this.elementsToBound=this.elements,f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e),this.setElementPosition(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect(),o={anchor:{x:s.left,y:s.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,o)),e.setAttribute("style",t)}setElementPosition(e){if(e.luge&&e.luge.anchor){const t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}}add(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)}tick(){const e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(t=>{e.setElementPosition(t)})}},S=new class{constructor(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}bindEvents(){o.on("resize",this.resizeHandler,this),o.on("scroll",this.scrollHandler,this),o.on("update",this.updateHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()}init(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()}resizeHandler(){this.getBoundingThrottle(),this.checkElementsThrottle()}scrollHandler(){this.checkElementsThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle(),this.checkElementsThrottle()},this)}setMaxScrollTop(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight}getBoundingThrottle(){this.setMaxScrollTop(),this.elements.forEach(e=>{this.elementsToBound.includes(e)||(e.scrollProgress=0,this.elementsToBound.push(e))}),f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect();e.scrollStart=s.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)}checkElementsThrottle(){this.elements.forEach(e=>{this.elementsToCheck.includes(e)||this.elementsToCheck.push(e)}),f.nextTick(this.checkElements.bind(this))}checkElements(){this.elementsToCheck.forEach(e=>{this.checkElement(e)}),this.elementsToCheck=[]}checkElement(e){const t=window.unifiedScrollTop;let s="",i=0;i=e.scrollStart<0?Math.min(Math.max(t/e.scrollEnd,0),1):Math.min(Math.max((t-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(i)&&(i=0),s=i<=0&&e.scrollStart>0?"under":i>=1&&e.scrollEnd0&&i<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))}add(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)}},x=class{constructor(){this.plugins={},this.emitter={emit:o.emit.bind(o),off:o.off.bind(o),on:o.on.bind(o),once:o.once.bind(o)},this.viewportobserver={add:w.add.bind(w),remove:w.remove.bind(w)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:E.add.bind(E),remove:E.remove.bind(E)},this.scrollobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.ticker={add:f.add.bind(f),nextTick:f.nextTick.bind(f),remove:f.remove.bind(f),tick:f.tick.bind(f)},this.settings=n.setSettings.bind(n)}init(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle("load"),{once:!0}):this.ticker.nextTick(()=>{l.cycle("load")},null)}addPlugin(e,t){this.plugins[e]=new t(this)}get _settings(){return n.settings}};export{y as Browser,g as Cursor,p as Intersection,m as LottiePlayer,x as Luge,v as MouseAnimation,b as Parallax,r as Plugin,a as Preloader,d as Reveal,h as ScrollAnimation,u as SmoothScroll,c as Transition}; +//# sourceMappingURL=luge.modern.js.map diff --git a/dist/js/luge.modern.js.map b/dist/js/luge.modern.js.map new file mode 100644 index 0000000..a2c956f --- /dev/null +++ b/dist/js/luge.modern.js.map @@ -0,0 +1 @@ +{"version":3,"file":"luge.modern.js","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/plugins/Browser.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers","[object Object]","item","Array","isArray","target","source","output","Object","assign","isObject","keys","forEach","key","mergeDeep","string","isString","replace","word","index","toLowerCase","toUpperCase","toCamelCase","charAt","slice","node","document","body","contains","obj","prop","deepFreeze","freeze","x","lower","upper","Math","min","max","Helpers$1","Emitter$1","constructor","this","events","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","length","event","do","next","wait","requestAnimationFrame","bind","add","position","remove","Emitter","sort","a","b","enableDebug","value","Core","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","LifeCycle","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","Luge","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","super","intro","playerIn","startTime","Date","now","doneLoad","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","default","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","progress","abs","entries","translate3d","transform","y","z","join","styles","willChange","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","clamp","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","line","pointA","pointB","lengthX","lengthY","sqrt","pow","angle","atan2","controlPoint","previous","o","PI","cos","sin","svgPath","command","reduce","acc","point","i","bezierCommand","cpsX","cpsY","cpeX","cpeY","Intersection","onViewportIntersect","class","viewportobserver","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","elementsToBound","Ticker","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","checkElement","isNaN","plugins","ViewportObserver","MouseObserver","readyState","addPlugin"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/luge.module.js b/dist/js/luge.module.js new file mode 100644 index 0000000..62d0113 --- /dev/null +++ b/dist/js/luge.module.js @@ -0,0 +1,2 @@ +import e from"virtual-scroll";import t from"bowser/src/bowser.js";var i=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),n=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),s=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),n.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(i){null===i.cycle||i.cycle===e?i.callback(function(){return s.done(e,t)}):s.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),n.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),o=new(/*#__PURE__*/function(){function e(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,s.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,n.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),n.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,n.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),n.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),n.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),r=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,s.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(o.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,n={};for(var s in t){var o=t[s],r="lg-"+this.pluginSlug;"root"!==s&&(r+="-"+s),r=i.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof o?(c=o[0],u=o[1]):c=o,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),n[s]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=n),n},e}();function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}function a(e,t){return(a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function c(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(o,r){var l=i.toCamelCase(o.dataset.lgReveal);setTimeout(function(){(l||s)&&t.revealCallback(o,null!=l?l:s,"out"),t.setRevealClasses(o,n)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,n)}),this.toRevealIn=[],this.toRevealOut=[]}},n.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},n.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},n.add=function(e,t,n){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=n)},t}(r),g=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(c(i))},t.transition={add:i.add.bind(c(i))},i}l(t,e);var n=t.prototype;return n.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},n.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},n.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},n.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},n.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},n.pageInit=function(e){this.bindLinksEvent(),e()},n.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},n.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},n.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},n.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},n.pageOut=function(e){var t=this,n=document.querySelector("[data-lg-page]");if(n){var s=i.toCamelCase(n.getAttribute("data-lg-page")),o=!1;if("function"==typeof this.transitions.out[s]?o=this.transitions.out[s]:"function"==typeof n.onpageout?o=n.onpageout:"function"==typeof this.transitions.out.default&&(o=this.transitions.out.default),o)o(n,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},n.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var n=i.toCamelCase(t.getAttribute("data-lg-page")),s=!1;if(t.style.opacity="","function"==typeof this.transitions.in[n]?s=this.transitions.in[n]:"function"==typeof t.onpagein?s=t.onpagein:"function"==typeof this.transitions.in.default&&(s=this.transitions.in.default),s)s(t,e);else{var o=document.querySelector("[data-lg-loader]");if(o&&o.classList.contains("is-visible"))if(o.playerIn)o.playerIn.stop(),o.playerIn.renderer.svgElement.style.opacity=1,"reverse"===o.getAttribute("data-lg-loader-in")?o.playerIn.goToAndPlay(o.playerIn.totalFrames,!0):o.playerIn.play(),o.playerIn.addEventListener("complete",function(){o.playerIn.renderer.svgElement.style.opacity="",o.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?o.addEventListener("transitionend",e,{once:!0}):e(),o.classList.remove("is-visible")}else e()}}else e()},n.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},n.add=function(e,t,n){void 0===t&&(t="default"),this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=n)},t}(r),p=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return u(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?u(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=d.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},s.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},s.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},s.onVirtualScroll=function(e){var t=e.deltaY,n=e.originalEvent,s=!!n.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});n.ctrlKey||s||(this.targetScroll-=t,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},s.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},n}(r),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(r),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(r),y=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(c(i)),i.onScrollProgress=i.onScrollProgress.bind(c(i)),t.lottie={deferInit:i.deferInit.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(r),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(r),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(r),E=function(e){var i=document.documentElement,n=t.getParser(window.navigator.userAgent);i.classList.add("is-"+n.getPlatformType()),(n.is("mobile")||n.is("tablet"))&&i.classList.add("is-handheld"),n.is("Safari")&&(i.classList.add("is-safari"),i.classList.add("is-safari-"+n.getBrowserVersion())),e.browser=n},S=new(/*#__PURE__*/function(){function e(){this.elements=[],s.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[o.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),T=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],o.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),o.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),x=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),T.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("mouseMove",this.mouseHandler,this),n.on("resize",this.resizeHandler,this),n.on("update",this.updateHandler,this),n.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var n=e.getBoundingClientRect(),s={anchor:{x:n.left,y:n.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,s)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("resize",this.resizeHandler,this),n.on("scroll",this.scrollHandler,this),n.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),T.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),P=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:n.emit.bind(n),off:n.off.bind(n),on:n.on.bind(n),once:n.once.bind(n)},this.viewportobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.lifecycle={add:s.add.bind(s),refresh:s.cycle.bind(s,"refresh"),remove:s.remove.bind(s),debug:s.enableDebug.bind(s),_cycle:s.cycle.bind(s)},this.mouseobserver={add:x.add.bind(x),remove:x.remove.bind(x)},this.scrollobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.ticker={add:T.add.bind(T),nextTick:T.nextTick.bind(T),remove:T.remove.bind(T),tick:T.tick.bind(T)},this.settings=o.setSettings.bind(o)}var t,i,r=e.prototype;return r.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",s.cycle("load"),{once:!0}):this.ticker.nextTick(function(){s.cycle("load")},null)},r.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return o.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/luge.umd.js b/dist/js/luge.umd.js new file mode 100644 index 0000000..1e2700a --- /dev/null +++ b/dist/js/luge.umd.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("virtual-scroll"),require("bowser/src/bowser.js")):"function"==typeof define&&define.amd?define(["exports","virtual-scroll","bowser/src/bowser.js"],t):t((e||self).luge={},e.virtualScroll,e.Bowser)}(this,function(e,t,i){function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=/*#__PURE__*/n(t),o=/*#__PURE__*/n(i),r=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),l=/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}(),a=new l,c=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),a.emit(r.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),a.emit(r.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),u=/*#__PURE__*/function(){function e(){this.settings=r.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,c.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=r.deepFreeze(r.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,a.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),a.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,a.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),a.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),a.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.16-beta %c > https://luge.cool ",e,e+"font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}(),d=new u,h=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,c.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(d.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],o="lg-"+this.pluginSlug;"root"!==n&&(o+="-"+n),o=r.toCamelCase(o);var l,a=e.dataset[o],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function g(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,p(e,t)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}function m(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,o){var l=r.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},o*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=r.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(h),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(m(i))},t.transition={add:i.add.bind(m(i))},i}g(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=r.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var o=document.querySelector("[data-lg-loader]");if(o){if(o.playerOut)o.playerOut.stop(),o.playerOut.renderer.svgElement.style.opacity=1,o.playerOut.play(),o.playerOut.addEventListener("complete",function(){t.reload||(o.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?o.addEventListener("transitionend",e,{once:!0}):e()}o.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=r.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var o=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==o&&"0s"!==o?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=r.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(h),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(m(i)),i}g(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return f(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?f(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=r.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(h),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}g(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(h),x=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(m(i))},i}g(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(h),T=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(m(i)),i.onScrollProgress=i.onScrollProgress.bind(m(i)),i}g(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,renderer:[String,this.luge._settings.lottie.renderer],subframe:[Boolean,this.luge._settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){i.player||(e.luge.scrollobserver.add(i),t.initPlayer(i),i.addEventListener("revealin",t.play),i.addEventListener("viewportintersect",t.onViewportIntersect))})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause()))},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(h),k=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}g(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(h),P=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(m(i)),i}g(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(h),A=new(/*#__PURE__*/function(){function e(){this.elements=[],c.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[d.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=r.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),L=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],d.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),d.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),C=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],c.add("pageKill",this.pageKill.bind(this)),c.add("pageInit",this.init.bind(this),20),L.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){a.on("mouseMove",this.mouseHandler,this),a.on("resize",this.resizeHandler,this),a.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;L.nextTick(function(){e.getBoundingThrottle()},this)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToBound.includes(t)||e.elementsToBound.push(t)}),L.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=r.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=r.clamp(t.x/e.luge.width,0,1),t.progressY=r.clamp(t.y/e.luge.height,0,1),e.luge.mouse=r.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),I=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),c.add("pageKill",this.pageKill.bind(this)),c.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){a.on("resize",this.resizeHandler,this),a.on("scroll",this.scrollHandler,this),a.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;L.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),L.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),L.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),O=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:a.emit.bind(a),off:a.off.bind(a),on:a.on.bind(a),once:a.once.bind(a)},this.viewportobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.lifecycle={add:c.add.bind(c),refresh:c.cycle.bind(c,"refresh"),remove:c.remove.bind(c),debug:c.enableDebug.bind(c),_cycle:c.cycle.bind(c)},this.mouseobserver={add:C.add.bind(C),remove:C.remove.bind(C)},this.scrollobserver={add:I.add.bind(I),remove:I.remove.bind(I)},this.ticker={add:L.add.bind(L),nextTick:L.nextTick.bind(L),remove:L.remove.bind(L),tick:L.tick.bind(L)},this.settings=d.setSettings.bind(d)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",c.cycle("load"),{once:!0}):this.ticker.nextTick(function(){c.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return d.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n renderer: [String, this.luge._settings.lottie.renderer],\n subframe: [Boolean, this.luge._settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n this.luge.scrollobserver.add(element)\n\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","Emitter$1","LifeCycle$1","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Core","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_iterator","_step","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator$userAgentD","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","loopFrame","required","force","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$1","ScrollObserver","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","plugins","readyState","addPlugin","get","Luge$1","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion"],"mappings":"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"} \ No newline at end of file diff --git a/dist/luge.umd.js b/dist/luge.umd.js new file mode 100644 index 0000000..09c9415 --- /dev/null +++ b/dist/luge.umd.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("virtual-scroll"),require("bowser/src/bowser.js")):"function"==typeof define&&define.amd?define(["virtual-scroll","bowser/src/bowser.js"],t):t((e||self).virtualScroll,e.Bowser)}(this,function(e,t){function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/i(e),s=/*#__PURE__*/i(t),o=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),r=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),l=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),P=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),x=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),x.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),x.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=new(/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:x.add.bind(x),nextTick:x.nextTick.bind(x),remove:x.remove.bind(x),tick:x.tick.bind(x)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle("load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import {\n Preloader,\n Reveal,\n Transition,\n ScrollAnimation,\n SmoothScroll,\n Cursor,\n Intersection,\n LottiePlayer,\n MouseAnimation,\n Parallax,\n Browser,\n Luge\n} from './luge'\n\nconst luge = new Luge()\n\nluge.addPlugin('preloader', Preloader)\nluge.addPlugin('reveal', Reveal)\nluge.addPlugin('transition', Transition)\nluge.addPlugin('scroll', ScrollAnimation)\nluge.addPlugin('smooth', SmoothScroll)\nluge.addPlugin('cursor', Cursor)\nluge.addPlugin('intersection', Intersection)\nluge.addPlugin('lottie', LottiePlayer)\nluge.addPlugin('mouse', MouseAnimation)\nluge.addPlugin('parallax', Parallax)\nluge.addPlugin('browser', Browser)\n\nluge.settings({\n cursor: {\n disabled: luge.browser.some(['tablet', 'mobile'])\n },\n smooth: {\n disabled: luge.browser.some(['tablet', 'mobile']) || luge.browser.satisfies({ safari: '<=12' })\n }\n})\n\nluge.init()\n\nwindow.luge = luge\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","plugins","readyState","addPlugin","get","Preloader","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","some","satisfies","safari"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index df31604..b845193 100644 --- a/package.json +++ b/package.json @@ -16,40 +16,44 @@ "files": [ "/dist/*" ], - "main": "./dist/js/luge.esm.js", + "sideEffects": false, + "type": "module", + "source": "src/js/luge.js", + "exports": { + "require": "./dist/js/luge.cjs", + "default": "./dist/js/luge.modern.js" + }, + "main": "./dist/js/luge.cjs", + "module": "./dist/js/luge.module.js", + "unpkg": "./dist/js/luge.umd.js", "scripts": { - "dev": "gulp dev --gulpfile build/gulpfile.js", - "build": "gulp --gulpfile build/gulpfile.js" + "build": "run-p build:*", + "build:pkg": "microbundle --format modern,esm,cjs --define VERSION=$npm_package_version", + "build:umd": "microbundle -i src/js/luge.umd.js --o ./dist/luge.umd.js --format umd --define VERSION=$npm_package_version", + "build:scss": "run-s scss:build scss:postcss", + "dev": "run-p dev:*", + "dev:js": "microbundle watch --define VERSION=$npm_package_version", + "dev:scss": "run-s scss:build scss:watch", + "scss:build": "node-sass --recursive --output dist/css/ src/scss/luge.scss", + "scss:watch": "node-sass --watch --recursive --output dist/css/ src/scss/luge.scss", + "scss:postcss": "postcss -d dist/css/ dist/css/" }, - "test": "exit 0", "devDependencies": { - "@babel/core": "^7.14.6", - "@babel/eslint-parser": "^7.14.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/preset-env": "^7.14.7", - "@rollup/plugin-alias": "^3.1.2", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^19.0.0", - "@rollup/plugin-eslint": "^8.0.1", - "@rollup/plugin-node-resolve": "^13.0.0", - "@rollup/plugin-replace": "^2.4.2", - "core-js": "^3.15.2", + "@babel/eslint-parser": "^7.21.3", + "autoprefixer": "^10.4.14", "eslint": "^7.29.0", "eslint-config-standard": "^16.0.3", "eslint-plugin-import": "^2.27.5", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", - "gulp": "^4.0.2", - "gulp-autoprefixer": "^8.0.0", - "gulp-sass": "^5.0.0", - "gulp-sass-glob": "^1.1.0", + "microbundle": "^0.15.1", "node-sass": "^7.0.1", - "rollup": "^2.52.3", - "rollup-plugin-terser": "^7.0.2" + "npm-run-all": "^4.1.5", + "postcss": "^8.4.21", + "postcss-cli": "^10.1.0" }, "dependencies": { "bowser": "^2.11.0", - "virtual-scroll": "^2.2.1", - "whatwg-fetch": "^3.6.2" + "virtual-scroll": "^2.2.1" } } diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..8cefa36 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: [ + require('autoprefixer')(), + ], +}; diff --git a/src/js/luge.js b/src/js/luge.js index cc88228..9d3045a 100644 --- a/src/js/luge.js +++ b/src/js/luge.js @@ -1,99 +1,13 @@ -// Imports -import LifeCycle from 'Core/LifeCycle' - -// import Polyfill from 'Core/Polyfill' - -import Luge from 'Core/Core' -import Emitter from 'Core/Emitter' -import ViewportObserver from 'Core/ViewportObserver' -import MouseObserver from 'Core/MouseObserver' -import ScrollObserver from 'Core/ScrollObserver' -import Ticker from 'Core/Ticker' -import Browser from 'Core/Browser' - -import Cursor from 'Plugins/Cursor' -import Intersection from 'Plugins/Intersection' -import LottiePlayer from 'Plugins/LottiePlayer' -import MouseAnimation from 'Plugins/MouseAnimation' -import Parallax from 'Plugins/Parallax' -import Preloader from 'Plugins/Preloader' -import Reveal from 'Plugins/Reveal' -import ScrollAnimation from 'Plugins/ScrollAnimation' -import SmoothScroll from 'Plugins/SmoothScroll' -import Transition from 'Plugins/Transition' - -const browser = Browser.bowser - -Luge.setSettings({ - cursor: { - disabled: browser.some(['tablet', 'mobile']) - }, - smooth: { - disabled: browser.some(['tablet', 'mobile']) || browser.satisfies({ safari: '<=12' }) - } -}) - -// Public methods -const luge = { - browser, - cursor: {}, - emitter: { - emit: Emitter.emit.bind(Emitter), - off: Emitter.off.bind(Emitter), - on: Emitter.on.bind(Emitter), - once: Emitter.once.bind(Emitter) - }, - viewportobserver: { - add: ViewportObserver.add.bind(ViewportObserver), - remove: ViewportObserver.remove.bind(ViewportObserver) - }, - lifecycle: { - add: LifeCycle.add.bind(LifeCycle), - refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'), - remove: LifeCycle.remove.bind(LifeCycle), - debug: LifeCycle.enableDebug.bind(LifeCycle) - }, - lottie: { - deferInit: LottiePlayer.deferInit.bind(LottiePlayer) - }, - mouseobserver: { - add: MouseObserver.add.bind(MouseObserver), - remove: MouseObserver.remove.bind(MouseObserver) - }, - preloader: { - add: Preloader.add.bind(Preloader) - }, - reveal: { - add: Reveal.add.bind(Reveal) - }, - scrollobserver: { - add: ScrollObserver.add.bind(ScrollObserver), - remove: ScrollObserver.remove.bind(ScrollObserver) - }, - ticker: { - add: Ticker.add.bind(Ticker), - nextTick: Ticker.nextTick.bind(Ticker), - remove: Ticker.remove.bind(Ticker), - tick: Ticker.tick.bind(Ticker) - }, - transition: { - add: Transition.add.bind(Transition) - }, - settings: Luge.setSettings.bind(Luge) -} - -// luge.lifecycle.debug() - -window.luge = luge - -export default luge - -// Site init on DOM ready -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true }) -} else { - Ticker.nextTick(() => { - LifeCycle.cycle('load') - }, - null) -} +export { default as Plugin } from './luge/core/Plugin' +export { default as Preloader } from './luge/plugins/Preloader' +export { default as Reveal } from './luge/plugins/Reveal' +export { default as Transition } from './luge/plugins/Transition' +export { default as ScrollAnimation } from './luge/plugins/ScrollAnimation' +export { default as SmoothScroll } from './luge/plugins/SmoothScroll' +export { default as Cursor } from './luge/plugins/Cursor' +export { default as Intersection } from './luge/plugins/Intersection' +export { default as LottiePlayer } from './luge/plugins/LottiePlayer' +export { default as MouseAnimation } from './luge/plugins/MouseAnimation' +export { default as Parallax } from './luge/plugins/Parallax' +export { default as Browser } from './luge/plugins/Browser' +export { default as Luge } from './luge/core' diff --git a/src/js/luge.umd.js b/src/js/luge.umd.js new file mode 100644 index 0000000..92b02e1 --- /dev/null +++ b/src/js/luge.umd.js @@ -0,0 +1,41 @@ +import { + Preloader, + Reveal, + Transition, + ScrollAnimation, + SmoothScroll, + Cursor, + Intersection, + LottiePlayer, + MouseAnimation, + Parallax, + Browser, + Luge +} from './luge' + +const luge = new Luge() + +luge.addPlugin('preloader', Preloader) +luge.addPlugin('reveal', Reveal) +luge.addPlugin('transition', Transition) +luge.addPlugin('scroll', ScrollAnimation) +luge.addPlugin('smooth', SmoothScroll) +luge.addPlugin('cursor', Cursor) +luge.addPlugin('intersection', Intersection) +luge.addPlugin('lottie', LottiePlayer) +luge.addPlugin('mouse', MouseAnimation) +luge.addPlugin('parallax', Parallax) +luge.addPlugin('browser', Browser) + +luge.settings({ + cursor: { + disabled: luge.browser.some(['tablet', 'mobile']) + }, + smooth: { + disabled: luge.browser.some(['tablet', 'mobile']) || luge.browser.satisfies({ safari: '<=12' }) + } +}) + +luge.init() + +window.luge = luge diff --git a/src/js/luge/core/Browser.js b/src/js/luge/core/Browser.js deleted file mode 100644 index 4621e5d..0000000 --- a/src/js/luge/core/Browser.js +++ /dev/null @@ -1,28 +0,0 @@ -import Bowser from 'bowser' - -class Browser { - /** - * Constructor - */ - constructor () { - // Browser detect - const browser = Bowser.getParser(window.navigator.userAgent) - - // Platform type class - document.documentElement.classList.add('is-' + browser.getPlatformType()) - - if (browser.is('mobile') || browser.is('tablet')) { - document.documentElement.classList.add('is-handheld') - } - - // Browser class - if (browser.is('Safari')) { - document.documentElement.classList.add('is-safari') - document.documentElement.classList.add('is-safari-' + browser.getBrowserVersion()) - } - - this.bowser = browser - } -} - -export default new Browser() diff --git a/src/js/luge/core/Core.js b/src/js/luge/core/Core.js index bfd6ba9..236cb36 100644 --- a/src/js/luge/core/Core.js +++ b/src/js/luge/core/Core.js @@ -1,6 +1,6 @@ -import LifeCycle from 'Core/LifeCycle' -import Emitter from 'Core/Emitter' -import Helpers from 'Core/Helpers' +import LifeCycle from './LifeCycle' +import Emitter from './Emitter' +import Helpers from './Helpers' class Luge { /** @@ -8,7 +8,7 @@ class Luge { */ constructor () { // Options - this.settings = { + this.settings = Helpers.deepFreeze({ cursor: { inertia: 1, trailLength: 10 @@ -48,7 +48,7 @@ class Luge { credits: { show: true } - } + }) // Timeouts this.timeouts = { @@ -83,7 +83,7 @@ class Luge { * Set settings */ setSettings (settings) { - this.settings = Helpers.mergeDeep(this.settings, settings) + this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings)) } /** diff --git a/src/js/luge/core/Helpers.js b/src/js/luge/core/Helpers.js index 3272279..c836d7f 100644 --- a/src/js/luge/core/Helpers.js +++ b/src/js/luge/core/Helpers.js @@ -90,6 +90,29 @@ class Helpers { static isInPage (node) { return (node === document.body) ? false : document.body.contains(node) } + + /** + * Deep freeze an object + * @param {Object} obj + * @returns {Object} freezed object + */ + static deepFreeze(obj) { + Object.keys(obj).forEach(prop => { + if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop]) + }) + return Object.freeze(obj) + } + + /** + * Clamp x between lower and upper + * @param {Number} x + * @param {Number} lower + * @param {Number} upper + * @returns {Number} clamped Number + */ + static clamp(x, lower, upper) { + return Math.min(upper, Math.max(lower, x)); + } } export default Helpers diff --git a/src/js/luge/core/LifeCycle.js b/src/js/luge/core/LifeCycle.js index 1694694..3a2975a 100644 --- a/src/js/luge/core/LifeCycle.js +++ b/src/js/luge/core/LifeCycle.js @@ -1,5 +1,5 @@ -import Emitter from 'Core/Emitter' -import Helpers from 'Core/Helpers' +import Emitter from './Emitter' +import Helpers from './Helpers' class LifeCycle { /** diff --git a/src/js/luge/core/MouseObserver.js b/src/js/luge/core/MouseObserver.js index 08c1009..dbb1952 100644 --- a/src/js/luge/core/MouseObserver.js +++ b/src/js/luge/core/MouseObserver.js @@ -1,7 +1,7 @@ -import Emitter from 'Core/Emitter' -import Helpers from 'Core/Helpers' -import LifeCycle from 'Core/LifeCycle' -import Ticker from 'Core/Ticker' +import Emitter from './Emitter' +import Helpers from './Helpers' +import LifeCycle from './LifeCycle' +import Ticker from './Ticker' class MouseObserver { constructor () { @@ -146,8 +146,8 @@ class MouseObserver { y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop } - mouse.progressX = Math.clamp(mouse.x / element.luge.width, 0, 1) - mouse.progressY = Math.clamp(mouse.y / element.luge.height, 0, 1) + mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1) + mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1) element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse) } diff --git a/src/js/luge/core/Plugin.js b/src/js/luge/core/Plugin.js index 35d6b71..44a06d4 100644 --- a/src/js/luge/core/Plugin.js +++ b/src/js/luge/core/Plugin.js @@ -1,6 +1,6 @@ -import Helpers from 'Core/Helpers' -import LifeCycle from 'Core/LifeCycle' -import Luge from 'Core/Core' +import Helpers from './Helpers' +import LifeCycle from './LifeCycle' +import Luge from './Core' export default class Plugin { /** diff --git a/src/js/luge/core/Polyfill.js b/src/js/luge/core/Polyfill.js deleted file mode 100644 index 4d39393..0000000 --- a/src/js/luge/core/Polyfill.js +++ /dev/null @@ -1,58 +0,0 @@ -class Polyfill { - /** - * Constructor - */ - constructor () { - this.closestPolyfill() - this.customEventPolyfill() - } - - /** - * Finds the closest nodes - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Element/closest} - */ - closestPolyfill () { - /* eslint-disable */ - if (!Element.prototype.matches) { - Element.prototype.matches = - Element.prototype.msMatchesSelector || - Element.prototype.webkitMatchesSelector - } - - if (!Element.prototype.closest) { - Element.prototype.closest = function(s) { - var el = this - - do { - if (Element.prototype.matches.call(el, s)) return el - el = el.parentElement || el.parentNode - } while (el !== null && el.nodeType === 1) - return null - } - } - /* eslint-enable */ - } - - /** - * Custom event - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#polyfill} - */ - customEventPolyfill () { - /* eslint-disable */ - if (typeof window.CustomEvent === 'function') { - return false - } - - function CustomEvent (event, params) { - params = params || { bubbles: false, cancelable: false, detail: null } - var evt = document.createEvent('CustomEvent') - evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail) - return evt - } - - window.CustomEvent = CustomEvent - /* eslint-enable */ - } -} - -export default new Polyfill() diff --git a/src/js/luge/core/ScrollObserver.js b/src/js/luge/core/ScrollObserver.js index f3ef544..6ea9ec1 100644 --- a/src/js/luge/core/ScrollObserver.js +++ b/src/js/luge/core/ScrollObserver.js @@ -1,7 +1,6 @@ -import Emitter from 'Core/Emitter' -import LifeCycle from 'Core/LifeCycle' -import Luge from 'Core/Core' -import Ticker from 'Core/Ticker' +import Emitter from './Emitter' +import LifeCycle from './LifeCycle' +import Ticker from './Ticker' class ScrollObserver { constructor () { diff --git a/src/js/luge/core/Ticker.js b/src/js/luge/core/Ticker.js index e6ea3c5..016e0b7 100644 --- a/src/js/luge/core/Ticker.js +++ b/src/js/luge/core/Ticker.js @@ -1,4 +1,4 @@ -import Luge from 'Core/Core' +import Luge from './Core' class Ticker { /** diff --git a/src/js/luge/core/ViewportObserver.js b/src/js/luge/core/ViewportObserver.js index 601015d..222c05d 100644 --- a/src/js/luge/core/ViewportObserver.js +++ b/src/js/luge/core/ViewportObserver.js @@ -1,6 +1,6 @@ -import Helpers from 'Core/Helpers' -import LifeCycle from 'Core/LifeCycle' -import Luge from 'Core/Core' +import Helpers from './Helpers' +import LifeCycle from './LifeCycle' +import Luge from './Core' class ViewportObserver { constructor () { diff --git a/src/js/luge/core/index.js b/src/js/luge/core/index.js new file mode 100644 index 0000000..856c456 --- /dev/null +++ b/src/js/luge/core/index.js @@ -0,0 +1,75 @@ +import LifeCycle from './LifeCycle' +import Core from './Core' +import Emitter from './Emitter' +import ViewportObserver from './ViewportObserver' +import MouseObserver from './MouseObserver' +import ScrollObserver from './ScrollObserver' +import Ticker from './Ticker' + +class Luge { + plugins = {} + + constructor() { + this.emitter = { + emit: Emitter.emit.bind(Emitter), + off: Emitter.off.bind(Emitter), + on: Emitter.on.bind(Emitter), + once: Emitter.once.bind(Emitter) + } + + this.viewportobserver = { + add: ViewportObserver.add.bind(ViewportObserver), + remove: ViewportObserver.remove.bind(ViewportObserver) + } + + this.lifecycle = { + add: LifeCycle.add.bind(LifeCycle), + refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'), + remove: LifeCycle.remove.bind(LifeCycle), + debug: LifeCycle.enableDebug.bind(LifeCycle), + _cycle: LifeCycle.cycle.bind(LifeCycle) + } + + this.mouseobserver = { + add: MouseObserver.add.bind(MouseObserver), + remove: MouseObserver.remove.bind(MouseObserver) + } + + this.scrollobserver = { + add: ScrollObserver.add.bind(ScrollObserver), + remove: ScrollObserver.remove.bind(ScrollObserver) + } + + this.ticker = { + add: Ticker.add.bind(Ticker), + nextTick: Ticker.nextTick.bind(Ticker), + remove: Ticker.remove.bind(Ticker), + tick: Ticker.tick.bind(Ticker) + } + + // TODO!: rename to setSettings + this.settings = Core.setSettings.bind(Core) + } + + init() { + // Site init on DOM ready + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true }) + } else { + this.ticker.nextTick(() => { + LifeCycle.cycle('load') + }, + null) + } + } + + addPlugin(key, Plugin) { + this.plugins[key] = new Plugin(this) + } + + get _settings() { + return Core.settings + } +} + +export default Luge diff --git a/src/js/luge/plugins/Browser.js b/src/js/luge/plugins/Browser.js new file mode 100644 index 0000000..795c8e3 --- /dev/null +++ b/src/js/luge/plugins/Browser.js @@ -0,0 +1,28 @@ +import Bowser from 'bowser/src/bowser.js' + +export default class Browser { + /** + * Constructor + */ + constructor (luge) { + const documentElement = document.documentElement + + // Browser detect + const browser = Bowser.getParser(window.navigator.userAgent) + + // Platform type class + documentElement.classList.add('is-' + browser.getPlatformType()) + + if (browser.is('mobile') || browser.is('tablet')) { + documentElement.classList.add('is-handheld') + } + + // Browser class + if (browser.is('Safari')) { + documentElement.classList.add('is-safari') + documentElement.classList.add('is-safari-' + browser.getBrowserVersion()) + } + + luge.browser = browser + } +} diff --git a/src/js/luge/plugins/Cursor.js b/src/js/luge/plugins/Cursor.js index 8e411ca..85f7251 100644 --- a/src/js/luge/plugins/Cursor.js +++ b/src/js/luge/plugins/Cursor.js @@ -1,15 +1,14 @@ -import LifeCycle from 'Core/LifeCycle' -import Luge from 'Core/Core' -import Plugin from 'Core/Plugin' -import Ticker from 'Core/Ticker' +import Plugin from '../core/Plugin' -class Cursor extends Plugin { +export default class Cursor extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('cursor') + this.luge = luge + this.cursors = [] this.pointers = [] this.trails = [] @@ -23,9 +22,9 @@ class Cursor extends Plugin { init () { super.init() - LifeCycle.add('pageInit', this.pageInit.bind(this)) + this.luge.lifecycle.add('pageInit', this.pageInit.bind(this)) - Ticker.add(this.tick, this) + this.luge.ticker.add(this.tick, this) this.bindEvents() } @@ -36,8 +35,8 @@ class Cursor extends Plugin { setAttributes () { this.pluginAttributes = { root: String, - inertia: [Number, Luge.settings.cursor.inertia], - length: [Number, Luge.settings.cursor.trailLength], + inertia: [Number, this.luge._settings.cursor.inertia], + length: [Number, this.luge._settings.cursor.trailLength], hide: Boolean } } @@ -269,5 +268,3 @@ class Cursor extends Plugin { }) } } - -export default new Cursor() diff --git a/src/js/luge/plugins/Intersection.js b/src/js/luge/plugins/Intersection.js index 19ea747..d21d7c9 100644 --- a/src/js/luge/plugins/Intersection.js +++ b/src/js/luge/plugins/Intersection.js @@ -1,15 +1,14 @@ -import LifeCycle from 'Core/LifeCycle' -import Emitter from 'Core/Emitter' -import Plugin from 'Core/Plugin' -import ViewportObserver from 'Core/ViewportObserver' +import Plugin from '../core/Plugin' -class Intersection extends Plugin { +export default class Intersection extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('intersection') + this.luge = luge + // Listeners this.listeners = { onViewportIntersect: this.onViewportIntersect.bind(this) @@ -24,8 +23,8 @@ class Intersection extends Plugin { this.elements = [] - LifeCycle.add('pageInit', this.pageInit.bind(this)) - LifeCycle.add('pageKill', this.pageKill.bind(this)) + this.luge.lifecycle.add('pageInit', this.pageInit.bind(this)) + this.luge.lifecycle.add('pageKill', this.pageKill.bind(this)) this.bindEvents() } @@ -44,7 +43,7 @@ class Intersection extends Plugin { * Bind events */ bindEvents () { - Emitter.on('update', this.updateHandler, this) + this.luge.emitter.on('update', this.updateHandler, this) } /** @@ -84,7 +83,7 @@ class Intersection extends Plugin { if (!this.elements.includes(element)) { this.getAttributes(element) - ViewportObserver.add(element) + this.luge.viewportobserver.add(element) element.addEventListener('viewportintersect', this.listeners.onViewportIntersect) this.elements.push(element) @@ -97,7 +96,7 @@ class Intersection extends Plugin { */ removeElement (element) { if (this.elements.includes(element)) { - ViewportObserver.remove(element) + this.luge.viewportobserver.remove(element) element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect) this.elements.splice(this.elements.indexOf(element), 1) @@ -149,5 +148,3 @@ class Intersection extends Plugin { } } } - -export default new Intersection() diff --git a/src/js/luge/plugins/LottiePlayer.js b/src/js/luge/plugins/LottiePlayer.js index 08bc0fd..b566aef 100644 --- a/src/js/luge/plugins/LottiePlayer.js +++ b/src/js/luge/plugins/LottiePlayer.js @@ -1,17 +1,14 @@ -import LifeCycle from 'Core/LifeCycle' -import Emitter from 'Core/Emitter' -import Luge from 'Core/Core' -import Plugin from 'Core/Plugin' -import ScrollObserver from 'Core/ScrollObserver' -import Ticker from 'Core/Ticker' - -class LottiePlayer extends Plugin { +import Plugin from '../core/Plugin' + +export default class LottiePlayer extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('lottie') + this.luge = luge + this.elements = [] this.doneLoad = null @@ -19,6 +16,10 @@ class LottiePlayer extends Plugin { // Listeners this.onViewportIntersect = this.onViewportIntersect.bind(this) this.onScrollProgress = this.onScrollProgress.bind(this) + + luge.lottie = { + deferInit: this.deferInit.bind(this) + } } /** @@ -28,10 +29,10 @@ class LottiePlayer extends Plugin { super.init() if (typeof lottie === 'object') { - LifeCycle.add('pageInit', this.pageInit.bind(this)) - LifeCycle.add('pageLoad', this.pageLoad.bind(this)) - LifeCycle.add('pageKill', this.pageKill.bind(this)) - LifeCycle.add('reveal', this.reveal.bind(this)) + this.luge.lifecycle.add('pageInit', this.pageInit.bind(this)) + this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this)) + this.luge.lifecycle.add('pageKill', this.pageKill.bind(this)) + this.luge.lifecycle.add('reveal', this.reveal.bind(this)) } this.bindEvents() @@ -73,7 +74,7 @@ class LottiePlayer extends Plugin { * Bind events */ bindEvents () { - Emitter.on('update', this.updateHandler, this) + this.luge.emitter.on('update', this.updateHandler, this) } /** @@ -130,7 +131,7 @@ class LottiePlayer extends Plugin { if (!element.player) { const attributes = this.getAttributes(element) - ScrollObserver.add(element) + this.luge.scrollobserver.add(element) if (attributes.lazy) { element.addEventListener('viewportintersect', self.onViewportIntersect) @@ -278,14 +279,14 @@ class LottiePlayer extends Plugin { element.player.pause() if (attributes.reverse) { - Ticker.nextTick(() => { + this.luge.ticker.nextTick(() => { element.player.setDirection(-1) element.player.goToAndPlay(element.player.totalFrames, true) self.setPlayerStateClasses(element, 'backward') }, this) } else { - Ticker.nextTick(() => { + this.luge.ticker.nextTick(() => { element.player.goToAndPlay(attributes.loopFrame, true) }, this) } @@ -294,7 +295,7 @@ class LottiePlayer extends Plugin { if (currentFrame === attributes.loopFrame) { element.player.pause() - Ticker.nextTick(() => { + this.luge.ticker.nextTick(() => { element.player.setDirection(1) element.player.goToAndPlay(attributes.loopFrame, true) @@ -358,8 +359,8 @@ class LottiePlayer extends Plugin { // Emit resize event when all animations are loaded if (this.toLoad === 0) { - Ticker.nextTick(() => { - Emitter.emit('resize') + this.luge.ticker.nextTick(() => { + this.luge.emitter.emit('resize') }) } } @@ -407,5 +408,3 @@ class LottiePlayer extends Plugin { element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true) } } - -export default new LottiePlayer() diff --git a/src/js/luge/plugins/MouseAnimation.js b/src/js/luge/plugins/MouseAnimation.js index 3cf664f..67fa85d 100644 --- a/src/js/luge/plugins/MouseAnimation.js +++ b/src/js/luge/plugins/MouseAnimation.js @@ -1,17 +1,14 @@ -import LifeCycle from 'Core/LifeCycle' -import Luge from 'Core/Core' -import Emitter from 'Core/Emitter' -import Plugin from 'Core/Plugin' -import MouseObserver from 'Core/MouseObserver' -import Ticker from 'Core/Ticker' - -class MouseAnimation extends Plugin { +import Plugin from '../core/Plugin' + +export default class MouseAnimation extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('mouse') + this.luge = luge + this.elements = [] this.mouse = { @@ -31,10 +28,10 @@ class MouseAnimation extends Plugin { init () { super.init() - LifeCycle.add('pageInit', this.pageInit.bind(this)) - LifeCycle.add('pageKill', this.pageKill.bind(this)) + this.luge.lifecycle.add('pageInit', this.pageInit.bind(this)) + this.luge.lifecycle.add('pageKill', this.pageKill.bind(this)) - Ticker.add(this.tick, this) + this.luge.ticker.add(this.tick, this) this.getMouseMovement() @@ -47,7 +44,7 @@ class MouseAnimation extends Plugin { setAttributes () { this.pluginAttributes = { root: String, - inertia: [String, Luge.settings.mouse.inertia] + inertia: [String, this.luge._settings.mouse.inertia] } } @@ -76,7 +73,7 @@ class MouseAnimation extends Plugin { * Bind events */ bindEvents () { - Emitter.on('update', this.updateHandler, this) + this.luge.emitter.on('update', this.updateHandler, this) } /** @@ -116,7 +113,7 @@ class MouseAnimation extends Plugin { if (!this.elements.includes(element)) { this.getAttributes(element) - MouseObserver.add(element) + this.luge.mouseobserver.add(element) element.luge.mouse.smoothX = 0 element.luge.mouse.smoothY = 0 @@ -224,5 +221,3 @@ class MouseAnimation extends Plugin { }) } } - -export default new MouseAnimation() diff --git a/src/js/luge/plugins/Parallax.js b/src/js/luge/plugins/Parallax.js index 97f8cec..c2040c1 100644 --- a/src/js/luge/plugins/Parallax.js +++ b/src/js/luge/plugins/Parallax.js @@ -1,17 +1,14 @@ -import LifeCycle from 'Core/LifeCycle' -import Luge from 'Core/Core' -import Emitter from 'Core/Emitter' -import Plugin from 'Core/Plugin' -import ScrollObserver from 'Core/ScrollObserver' -import Ticker from 'Core/Ticker' - -class Parallax extends Plugin { +import Plugin from '../core/Plugin' + +export default class Parallax extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('parallax') + this.luge = luge + this.elements = [] // Listeners @@ -24,10 +21,10 @@ class Parallax extends Plugin { init () { super.init() - LifeCycle.add('pageInit', this.pageInit.bind(this), 30) - LifeCycle.add('pageKill', this.pageKill.bind(this)) + this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30) + this.luge.lifecycle.add('pageKill', this.pageKill.bind(this)) - Ticker.add(this.tick, this) + this.luge.ticker.add(this.tick, this) this.bindEvents() } @@ -41,7 +38,7 @@ class Parallax extends Plugin { disable: String, amplitude: [String, 1], anchor: String, - inertia: [String, Luge.settings.parallax.inertia] + inertia: [String, this.luge._settings.parallax.inertia] } } @@ -68,7 +65,7 @@ class Parallax extends Plugin { * Bind events */ bindEvents () { - Emitter.on('update', this.updateHandler, this) + this.luge.emitter.on('update', this.updateHandler, this) } /** @@ -135,7 +132,7 @@ class Parallax extends Plugin { */ addElement (element) { if (!this.elements.includes(element)) { - ScrollObserver.add(element) + this.luge.scrollobserver.add(element) if (element.luge.parallax.root === 'child') { element.style.overflow = 'hidden' @@ -147,7 +144,7 @@ class Parallax extends Plugin { this.elements.push(element) - Ticker.nextTick(() => { + this.luge.ticker.nextTick(() => { element.addEventListener('scrollprogress', this.onScrollProgress) this.moveElement(element) }) @@ -215,5 +212,3 @@ class Parallax extends Plugin { }) } } - -export default new Parallax() diff --git a/src/js/luge/plugins/Preloader.js b/src/js/luge/plugins/Preloader.js index 4d90d57..80b5f3d 100644 --- a/src/js/luge/plugins/Preloader.js +++ b/src/js/luge/plugins/Preloader.js @@ -1,18 +1,22 @@ -import LifeCycle from 'Core/LifeCycle' -import Plugin from 'Core/Plugin' -import Luge from 'Core/Core' +import Plugin from '../core/Plugin' -class PreLoader extends Plugin { +export default class PreLoader extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('preloader') + this.luge = luge + this.intro = false this.playerIn = false this.startTime = Date.now() this.doneLoad = null + + luge.preloader = { + add: this.add.bind(this) + } } /** @@ -30,10 +34,10 @@ class PreLoader extends Plugin { this.initLottie() - LifeCycle.add('siteIn', this.siteIn.bind(this)) + this.luge.lifecycle.add('siteIn', this.siteIn.bind(this)) } - LifeCycle.add('pageLoad', this.pageLoad.bind(this)) + this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this)) } /** @@ -42,7 +46,7 @@ class PreLoader extends Plugin { setAttributes () { this.pluginAttributes = { root: [String, ''], - duration: [Number, Luge.settings.preloader.duration], + duration: [Number, this.luge._settings.preloader.duration], in: String, reverse: Boolean } @@ -168,5 +172,3 @@ class PreLoader extends Plugin { } } } - -export default new PreLoader() diff --git a/src/js/luge/plugins/Reveal.js b/src/js/luge/plugins/Reveal.js index 21aa318..2c10e38 100644 --- a/src/js/luge/plugins/Reveal.js +++ b/src/js/luge/plugins/Reveal.js @@ -1,18 +1,15 @@ -import LifeCycle from 'Core/LifeCycle' -import Emitter from 'Core/Emitter' -import Helpers from 'Core/Helpers' -import Luge from 'Core/Core' -import Plugin from 'Core/Plugin' -import ScrollObserver from 'Core/ScrollObserver' -import Ticker from 'Core/Ticker' - -class Reveal extends Plugin { +import Helpers from '../core/Helpers' +import Plugin from '../core/Plugin' + +export default class Reveal extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('reveal') + this.luge = luge + this.elements = [] this.toRevealIn = [] this.toRevealOut = [] @@ -25,6 +22,10 @@ class Reveal extends Plugin { // Listeners this.onScrollProgress = this.onScrollProgress.bind(this) + + luge.reveal = { + add: this.add.bind(this) + } } /** @@ -33,9 +34,9 @@ class Reveal extends Plugin { init () { super.init() - LifeCycle.add('pageInit', this.pageInit.bind(this), 11) - LifeCycle.add('pageKill', this.pageKill.bind(this)) - LifeCycle.add('reveal', this.reveal.bind(this)) + this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11) + this.luge.lifecycle.add('pageKill', this.pageKill.bind(this)) + this.luge.lifecycle.add('reveal', this.reveal.bind(this)) this.bindEvents() } @@ -62,7 +63,7 @@ class Reveal extends Plugin { const data = super.getAttributes(element) if (data.stagger !== undefined && data.stagger === '') { - data.stagger = Luge.settings.reveal.stagger + data.stagger = this.luge._settings.reveal.stagger } else if (data.stagger === undefined) { data.stagger = false } @@ -74,9 +75,9 @@ class Reveal extends Plugin { * Bind events */ bindEvents () { - Emitter.on('resize', this.resizeHandler, this) - Emitter.on('scroll', this.scrollHandler, this) - Emitter.on('update', this.updateHandler, this) + this.luge.emitter.on('resize', this.resizeHandler, this) + this.luge.emitter.on('scroll', this.scrollHandler, this) + this.luge.emitter.on('update', this.updateHandler, this) } /** @@ -118,7 +119,7 @@ class Reveal extends Plugin { element.luge.reveal.name = Helpers.toCamelCase(revealName) if (!attributes.manual) { - ScrollObserver.add(element) + this.luge.scrollobserver.add(element) element.addEventListener('scrollprogress', this.onScrollProgress) } else { @@ -140,7 +141,7 @@ class Reveal extends Plugin { const childRevealName = child.dataset.lgReveal child.style.transition = 'none' - Ticker.nextTick(() => { + this.luge.ticker.nextTick(() => { child.style.transition = '' }) @@ -159,7 +160,7 @@ class Reveal extends Plugin { }) } else { element.style.transition = 'none' - Ticker.nextTick(() => { + this.luge.ticker.nextTick(() => { element.style.transition = '' }) @@ -208,7 +209,7 @@ class Reveal extends Plugin { */ onScrollProgress (e) { const element = e.target - const threshold = Luge.settings.reveal.threshold + const threshold = this.luge._settings.reveal.threshold if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) { if (this.toRevealOut.includes(element)) { @@ -307,7 +308,7 @@ class Reveal extends Plugin { }, delay ? revealInTimeout : 0) if (delay) { - revealInTimeout += Luge.settings.reveal.stagger * 1000 + revealInTimeout += this.luge._settings.reveal.stagger * 1000 } if (!element.luge.reveal.multiple) { @@ -399,5 +400,3 @@ class Reveal extends Plugin { } } } - -export default new Reveal() diff --git a/src/js/luge/plugins/ScrollAnimation.js b/src/js/luge/plugins/ScrollAnimation.js index 858e360..0dd8f35 100644 --- a/src/js/luge/plugins/ScrollAnimation.js +++ b/src/js/luge/plugins/ScrollAnimation.js @@ -1,17 +1,14 @@ -import LifeCycle from 'Core/LifeCycle' -import Luge from 'Core/Core' -import Emitter from 'Core/Emitter' -import Plugin from 'Core/Plugin' -import ScrollObserver from 'Core/ScrollObserver' -import Ticker from 'Core/Ticker' - -class ScrollAnimation extends Plugin { +import Plugin from '../core/Plugin' + +export default class ScrollAnimation extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('scroll') + this.luge = luge + this.elements = [] // Properties @@ -56,10 +53,10 @@ class ScrollAnimation extends Plugin { init () { super.init() - LifeCycle.add('pageInit', this.pageInit.bind(this)) - LifeCycle.add('pageKill', this.pageKill.bind(this)) + this.luge.lifecycle.add('pageInit', this.pageInit.bind(this)) + this.luge.lifecycle.add('pageKill', this.pageKill.bind(this)) - Ticker.add(this.tick, this) + this.luge.ticker.add(this.tick, this) this.bindEvents() } @@ -71,7 +68,7 @@ class ScrollAnimation extends Plugin { this.pluginAttributes = { root: String, yoyo: Boolean, - inertia: [String, Luge.settings.scroll.inertia], + inertia: [String, this.luge._settings.scroll.inertia], animate: String } } @@ -101,7 +98,7 @@ class ScrollAnimation extends Plugin { * Bind events */ bindEvents () { - Emitter.on('update', this.updateHandler, this) + this.luge.emitter.on('update', this.updateHandler, this) } /** @@ -141,7 +138,7 @@ class ScrollAnimation extends Plugin { if (!this.elements.includes(element)) { const attributes = this.getAttributes(element) - ScrollObserver.add(element) + this.luge.scrollobserver.add(element) element.addEventListener('scrollprogress', this.onScrollProgress) @@ -335,5 +332,3 @@ class ScrollAnimation extends Plugin { } } } - -export default new ScrollAnimation() diff --git a/src/js/luge/plugins/SmoothScroll.js b/src/js/luge/plugins/SmoothScroll.js index 437f3f0..55ac712 100644 --- a/src/js/luge/plugins/SmoothScroll.js +++ b/src/js/luge/plugins/SmoothScroll.js @@ -1,12 +1,9 @@ -import LifeCycle from 'Core/LifeCycle' -import Emitter from 'Core/Emitter' -import Luge from 'Core/Core' -import Plugin from 'Core/Plugin' -import Ticker from 'Core/Ticker' +import Helpers from '../core/Helpers' +import Plugin from '../core/Plugin' import VirtualScroll from 'virtual-scroll' -class SmoothScroll extends Plugin { +export default class SmoothScroll extends Plugin { /** * Constructor */ @@ -49,7 +46,7 @@ class SmoothScroll extends Plugin { this.virtualScroll.on(this.onVirtualScroll.bind(this)) - Ticker.add(this.tick, this) + this.luge.ticker.add(this.tick, this) this.bindEvents() } @@ -59,7 +56,7 @@ class SmoothScroll extends Plugin { * Bind events */ bindEvents () { - Emitter.on('scroll', this.onScroll, this) + this.luge.emitter.on('scroll', this.onScroll, this) } /** @@ -85,7 +82,7 @@ class SmoothScroll extends Plugin { } this.targetScroll -= deltaY - this.targetScroll = Math.clamp(0, this.targetScroll, window.maxScrollTop) + this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop) window.isSmoothScrolling = true } @@ -94,8 +91,10 @@ class SmoothScroll extends Plugin { * Tick */ tick () { - this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * Luge.settings.smooth.inertia - this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * Luge.settings.smooth.inertia + const settings = this.luge._settings.smooth + + this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia + this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll) @@ -112,5 +111,3 @@ class SmoothScroll extends Plugin { } } } - -export default new SmoothScroll() diff --git a/src/js/luge/plugins/Transition.js b/src/js/luge/plugins/Transition.js index 76b983e..d9d415b 100644 --- a/src/js/luge/plugins/Transition.js +++ b/src/js/luge/plugins/Transition.js @@ -1,22 +1,20 @@ -import LifeCycle from 'Core/LifeCycle' -import Emitter from 'Core/Emitter' -import Luge from 'Core/Core' -import Helpers from 'Core/Helpers' -import Plugin from 'Core/Plugin' -import Ticker from 'Core/Ticker' - -class Transition extends Plugin { +import Helpers from '../core/Helpers' +import Plugin from '../core/Plugin' + +export default class Transition extends Plugin { /** * Constructor */ - constructor () { + constructor (luge) { super('transition') + this.luge = luge + this.url = window.location.href this.pathname = window.location.pathname this.pageFetched = null this.currentPage = null - this.reload = Luge.settings.transition.reload + this.reload = this.luge._settings.transition.reload this.prevScrollTop = 0 this.newScrollTop = 0 @@ -27,6 +25,10 @@ class Transition extends Plugin { } this.listeners = { linkHandler: this.linkHandler.bind(this) } + + luge.transition = { + add: this.add.bind(this) + } } /** @@ -35,7 +37,7 @@ class Transition extends Plugin { init () { this.currentPage = document.querySelector('[data-lg-page]') if (this.currentPage) { - this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : Luge.settings.transition.reload + this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload } this.initLoader() @@ -44,12 +46,12 @@ class Transition extends Plugin { window.addEventListener('popstate', this.historyStateChanged.bind(this)) } - LifeCycle.add('pageInit', this.pageInit.bind(this)) - LifeCycle.add('pageFetch', this.pageFetch.bind(this)) - LifeCycle.add('pageOut', this.pageOut.bind(this)) - LifeCycle.add('pageIn', this.pageIn.bind(this), 10, 'transition') - LifeCycle.add('pageCreate', this.pageCreate.bind(this)) - LifeCycle.add('pageKill', this.pageKill.bind(this), 999, 'transition') + this.luge.lifecycle.add('pageInit', this.pageInit.bind(this)) + this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this)) + this.luge.lifecycle.add('pageOut', this.pageOut.bind(this)) + this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition') + this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this)) + this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition') } /** @@ -118,14 +120,14 @@ class Transition extends Plugin { document.head.appendChild(prefetchLink) // Change URL after pageOut - LifeCycle.add('siteReload', (done) => { + this.luge.lifecycle.add('siteReload', (done) => { window.location = url }) // Call cycle - LifeCycle.cycle('reload') + this.luge.lifecycle._cycle('reload') } else { - LifeCycle.cycle('transition') + this.luge.lifecycle._cycle('transition') } } @@ -148,7 +150,7 @@ class Transition extends Plugin { if (loader) { loader.style.transition = 'none' loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader')) - Ticker.nextTick(() => { + this.luge.ticker.nextTick(() => { loader.style.transition = '' }) } @@ -277,7 +279,7 @@ class Transition extends Plugin { this.prevScrollTop = 0 this.newScrollTop = 0 - Emitter.emit('pageTransition', html) + this.luge.emitter.emit('pageTransition', html) done() } @@ -291,7 +293,7 @@ class Transition extends Plugin { oldPage.parentNode.removeChild(oldPage) this.currentPage = document.querySelector('[data-lg-page]') - this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : Luge.settings.transition.reload + this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload done() } @@ -431,7 +433,7 @@ class Transition extends Plugin { if (url.pathname !== window.location.pathname) { this.prevScrollTop = window.scrollY - Ticker.nextTick(() => { + this.luge.ticker.nextTick(() => { this.newScrollTop = window.scrollY window.scroll({ @@ -463,5 +465,3 @@ class Transition extends Plugin { } } } - -export default new Transition() diff --git a/yarn.lock b/yarn.lock index 805bbe7..e42308c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,815 +2,959 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - "integrity" "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==" - "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz" - "version" "2.1.2" +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7": - "integrity" "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/highlight" "^7.16.7" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@babel/code-frame@7.12.11": - "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - "version" "7.12.11" + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": - "integrity" "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==" - "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz" - "version" "7.17.0" - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.14.6", "@babel/core@^7.4.0-0", "@babel/core@>=7.11.0": - "integrity" "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==" - "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz" - "version" "7.17.5" - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - "convert-source-map" "^1.7.0" - "debug" "^4.1.0" - "gensync" "^1.0.0-beta.2" - "json5" "^2.1.2" - "semver" "^6.3.0" - -"@babel/eslint-parser@^7.14.7": - "integrity" "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==" - "resolved" "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz" - "version" "7.17.0" - dependencies: - "eslint-scope" "^5.1.1" - "eslint-visitor-keys" "^2.1.0" - "semver" "^6.3.0" - -"@babel/generator@^7.17.3": - "integrity" "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz" - "version" "7.17.3" - dependencies: - "@babel/types" "^7.17.0" - "jsesc" "^2.5.1" - "source-map" "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.16.7": - "integrity" "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==" - "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" - "version" "7.16.7" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: - "@babel/types" "^7.16.7" + "@babel/highlight" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - "integrity" "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==" - "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" +"@babel/code-frame@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== + dependencies: + "@babel/highlight" "^7.22.5" + +"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== + +"@babel/core@^7.12.10": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f" + integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.9" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helpers" "^7.22.6" + "@babel/parser" "^7.22.7" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.8" + "@babel/types" "^7.22.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.1" + +"@babel/eslint-parser@^7.21.3": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.9.tgz#75f8aa978d1e76c87cc6f26c1ea16ae58804d390" + integrity sha512-xdMkt39/nviO/4vpVdrEYPwXCsYIXSSAr6mC7WQsNIlGnuxKyKE7GZjalcnbSWiC4OXGNNN3UQPeHfjSC6sTDA== + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.1" + +"@babel/generator@^7.22.7", "@babel/generator@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" + integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== + dependencies: + "@babel/types" "^7.22.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": - "integrity" "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==" - "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - "browserslist" "^4.17.5" - "semver" "^6.3.0" + "@babel/types" "^7.16.7" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": - "integrity" "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==" - "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz" - "version" "7.17.6" - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" + integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892" + integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.5" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" + integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.16.7": - "integrity" "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==" - "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz" - "version" "7.17.0" + version "7.17.0" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" - "regexpu-core" "^5.0.1" - -"@babel/helper-define-polyfill-provider@^0.3.1": - "integrity" "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" - "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - "debug" "^4.1.1" - "lodash.debounce" "^4.0.8" - "resolve" "^1.14.2" - "semver" "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7": - "integrity" "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==" - "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-explode-assignable-expression@^7.16.7": - "integrity" "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/types" "^7.16.7" + regexpu-core "^5.0.1" -"@babel/helper-function-name@^7.16.7": - "integrity" "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==" - "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" -"@babel/helper-get-function-arity@^7.16.7": - "integrity" "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==" - "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-define-polyfill-provider@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a" + integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A== dependencies: - "@babel/types" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" -"@babel/helper-hoist-variables@^7.16.7": - "integrity" "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==" - "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/types" "^7.16.7" +"@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== -"@babel/helper-member-expression-to-functions@^7.16.7": - "integrity" "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==" - "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== dependencies: - "@babel/types" "^7.16.7" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": - "integrity" "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.5" -"@babel/helper-module-transforms@^7.16.7": - "integrity" "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz" - "version" "7.17.6" +"@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" + "@babel/types" "^7.22.5" -"@babel/helper-optimise-call-expression@^7.16.7": - "integrity" "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==" - "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-module-imports@^7.10.4": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== dependencies: "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - "integrity" "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz" - "version" "7.16.7" - -"@babel/helper-remap-async-to-generator@^7.16.8": - "integrity" "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==" - "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz" - "version" "7.16.8" +"@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7": - "integrity" "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==" - "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.5" -"@babel/helper-simple-access@^7.16.7": - "integrity" "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==" - "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" + integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== dependencies: - "@babel/types" "^7.16.7" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - "integrity" "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" - "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz" - "version" "7.16.0" +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.16.7": - "integrity" "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==" - "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/types" "^7.16.7" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== -"@babel/helper-validator-identifier@^7.16.7": - "integrity" "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" - "version" "7.16.7" - -"@babel/helper-validator-option@^7.16.7": - "integrity" "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz" - "version" "7.16.7" - -"@babel/helper-wrap-function@^7.16.8": - "integrity" "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==" - "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz" - "version" "7.16.8" - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.17.2": - "integrity" "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==" - "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz" - "version" "7.17.2" - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": - "integrity" "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz" - "version" "7.16.10" +"@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - "chalk" "^2.0.0" - "js-tokens" "^4.0.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" -"@babel/parser@^7.16.7", "@babel/parser@^7.17.3": - "integrity" "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz" - "version" "7.17.3" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - "integrity" "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - "integrity" "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - "integrity" "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz" - "version" "7.16.8" - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/types" "^7.22.5" -"@babel/plugin-proposal-class-properties@^7.16.7": - "integrity" "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-class-static-block@^7.16.7": - "integrity" "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz" - "version" "7.17.6" - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/types" "^7.22.5" -"@babel/plugin-proposal-dynamic-import@^7.16.7": - "integrity" "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz" - "version" "7.16.7" +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/types" "^7.22.5" -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - "integrity" "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/plugin-proposal-json-strings@^7.16.7": - "integrity" "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helper-wrap-function@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9" + integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helpers@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" + integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.6" + "@babel/types" "^7.22.5" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - "integrity" "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz" - "version" "7.16.7" +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - "integrity" "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz" - "version" "7.16.7" +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.0.0" + js-tokens "^4.0.0" -"@babel/plugin-proposal-numeric-separator@^7.16.7": - "integrity" "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/parser@^7.22.5", "@babel/parser@^7.22.7", "@babel/parser@^7.3.3": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" + integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== -"@babel/plugin-proposal-object-rest-spread@^7.16.7": - "integrity" "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz" - "version" "7.17.3" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" + integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - "integrity" "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" + integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" -"@babel/plugin-proposal-optional-chaining@^7.16.7": - "integrity" "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-proposal-class-properties@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.16.11": - "integrity" "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz" - "version" "7.16.11" - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - "integrity" "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz" - "version" "7.16.7" - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - "integrity" "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-async-generators@^7.8.4": - "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - "version" "7.8.4" + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": - "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - "version" "7.12.13" + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": - "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" - "version" "7.14.5" + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": - "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": - "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-flow@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" + integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings@^7.8.3": - "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.12.1", "@babel/plugin-syntax-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - "version" "7.10.4" + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": - "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - "version" "7.10.4" + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": - "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - "version" "7.8.3" + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": - "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" - "version" "7.14.5" + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": - "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - "version" "7.14.5" + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.16.7": - "integrity" "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.16.8": - "integrity" "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz" - "version" "7.16.8" +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - "integrity" "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-async-generator-functions@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz#053e76c0a903b72b573cb1ab7d6882174d460a1b" + integrity sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-block-scoping@^7.16.7": - "integrity" "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" -"@babel/plugin-transform-classes@^7.16.7": - "integrity" "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "globals" "^11.1.0" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-computed-properties@^7.16.7": - "integrity" "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-block-scoping@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" + integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.16.7": - "integrity" "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz" - "version" "7.17.3" +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - "integrity" "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-class-static-block@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" + integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" + +"@babel/plugin-transform-destructuring@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" + integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.16.7": - "integrity" "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - "integrity" "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-dynamic-import@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" + integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-for-of@^7.16.7": - "integrity" "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.16.7": - "integrity" "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-export-namespace-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" + integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-literals@^7.16.7": - "integrity" "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-flow-strip-types@^7.12.10", "@babel/plugin-transform-flow-strip-types@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" + integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow" "^7.22.5" -"@babel/plugin-transform-member-expression-literals@^7.16.7": - "integrity" "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-for-of@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.16.7": - "integrity" "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "babel-plugin-dynamic-import-node" "^2.3.3" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.16.8": - "integrity" "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz" - "version" "7.16.8" +"@babel/plugin-transform-json-strings@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" + integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "babel-plugin-dynamic-import-node" "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-modules-systemjs@^7.16.7": - "integrity" "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "babel-plugin-dynamic-import-node" "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-umd@^7.16.7": - "integrity" "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-logical-assignment-operators@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" + integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": - "integrity" "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz" - "version" "7.16.8" +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.16.7": - "integrity" "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-object-super@^7.16.7": - "integrity" "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" + integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-parameters@^7.16.7": - "integrity" "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-modules-systemjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" + integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.16.7": - "integrity" "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.16.7": - "integrity" "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "regenerator-transform" "^0.14.2" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-reserved-words@^7.16.7": - "integrity" "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.16.7": - "integrity" "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" + integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-spread@^7.16.7": - "integrity" "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-numeric-separator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" + integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-sticky-regex@^7.16.7": - "integrity" "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-object-rest-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" + integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.16.7": - "integrity" "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.16.7": - "integrity" "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-optional-catch-binding@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" + integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-unicode-escapes@^7.16.7": - "integrity" "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-optional-chaining@^7.22.5", "@babel/plugin-transform-optional-chaining@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564" + integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-unicode-regex@^7.16.7": - "integrity" "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz" - "version" "7.16.7" +"@babel/plugin-transform-parameters@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@^7.14.7": - "integrity" "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==" - "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz" - "version" "7.16.11" +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" + integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-display-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.22.5" + +"@babel/plugin-transform-react-jsx@^7.12.11", "@babel/plugin-transform-react-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" + integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/plugin-transform-react-pure-annotations@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" + integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" + integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" + integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.12.11": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.9.tgz#57f17108eb5dfd4c5c25a44c1977eba1df310ac7" + integrity sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -820,5215 +964,4847 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.7" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.5" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.6" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.5" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" + "@babel/plugin-transform-numeric-separator" "^7.22.5" + "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.6" + "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.5" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.5" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - "babel-plugin-polyfill-corejs2" "^0.3.0" - "babel-plugin-polyfill-corejs3" "^0.5.0" - "babel-plugin-polyfill-regenerator" "^0.3.0" - "core-js-compat" "^3.20.2" - "semver" "^6.3.0" + "@babel/types" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.4" + babel-plugin-polyfill-corejs3 "^0.8.2" + babel-plugin-polyfill-regenerator "^0.5.1" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-flow@^7.12.1": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.5.tgz#876f24ab6b38bd79703a93f32020ca2162312784" + integrity sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-transform-flow-strip-types" "^7.22.5" "@babel/preset-modules@^0.1.5": - "integrity" "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==" - "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" - "version" "0.1.5" + version "0.1.5" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" - "esutils" "^2.0.2" + esutils "^2.0.2" -"@babel/runtime@^7.8.4": - "integrity" "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" - "version" "7.17.2" +"@babel/preset-react@^7.12.10": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6" + integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== dependencies: - "regenerator-runtime" "^0.13.4" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.22.5" -"@babel/template@^7.16.7": - "integrity" "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==" - "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" - "version" "7.16.7" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.12.5": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" + regenerator-runtime "^0.13.11" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3": - "integrity" "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz" - "version" "7.17.3" - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" - "debug" "^4.1.0" - "globals" "^11.1.0" - -"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.4.4": - "integrity" "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" - "version" "7.17.0" +"@babel/runtime@^7.8.4": + version "7.17.2" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" + integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": + version "7.22.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" + integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.7" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.7" + "@babel/types" "^7.22.5" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.16.7", "@babel/types@^7.4.4": + version "7.17.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== dependencies: "@babel/helper-validator-identifier" "^7.16.7" - "to-fast-properties" "^2.0.0" + to-fast-properties "^2.0.0" + +"@babel/types@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + to-fast-properties "^2.0.0" "@eslint/eslintrc@^0.4.3": - "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" - "version" "0.4.3" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.1.1" - "espree" "^7.3.0" - "globals" "^13.9.0" - "ignore" "^4.0.6" - "import-fresh" "^3.2.1" - "js-yaml" "^3.13.1" - "minimatch" "^3.0.4" - "strip-json-comments" "^3.1.1" + version "0.4.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" "@gar/promisify@^1.0.1": - "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - "version" "1.1.3" + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.5.0": - "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" - "version" "0.5.0" + version "0.5.0" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== dependencies: "@humanwhocodes/object-schema" "^1.2.0" - "debug" "^4.1.1" - "minimatch" "^3.0.4" + debug "^4.1.1" + minimatch "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - "version" "1.2.1" + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/resolve-uri@^3.0.3": - "integrity" "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" - "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz" - "version" "3.0.5" +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/sourcemap-codec@^1.4.10": - "integrity" "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" - "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz" - "version" "1.4.11" + version "1.4.11" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== -"@jridgewell/trace-mapping@^0.3.0": - "integrity" "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==" - "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz" - "version" "0.3.4" +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + +"@nicolo-ribaudo/semver-v6@^6.3.3": + version "6.3.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" + integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" "@npmcli/fs@^1.0.0": - "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" - "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" - "version" "1.1.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" - "semver" "^7.3.5" + semver "^7.3.5" "@npmcli/move-file@^1.0.1": - "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" - "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: - "mkdirp" "^1.0.4" - "rimraf" "^3.0.2" + mkdirp "^1.0.4" + rimraf "^3.0.2" -"@rollup/plugin-alias@^3.1.2": - "integrity" "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz" - "version" "3.1.9" +"@rollup/plugin-alias@^3.1.1": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz#a5d267548fe48441f34be8323fb64d1d4a1b3fdf" + integrity sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw== dependencies: - "slash" "^3.0.0" + slash "^3.0.0" -"@rollup/plugin-babel@^5.3.0": - "integrity" "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz" - "version" "5.3.1" +"@rollup/plugin-babel@^5.2.2": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== dependencies: "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" -"@rollup/plugin-commonjs@^19.0.0": - "integrity" "sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz" - "version" "19.0.2" +"@rollup/plugin-commonjs@^17.0.0": + version "17.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz#757ec88737dffa8aa913eb392fade2e45aef2a2d" + integrity sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew== dependencies: "@rollup/pluginutils" "^3.1.0" - "commondir" "^1.0.1" - "estree-walker" "^2.0.1" - "glob" "^7.1.6" - "is-reference" "^1.2.1" - "magic-string" "^0.25.7" - "resolve" "^1.17.0" - -"@rollup/plugin-eslint@^8.0.1": - "integrity" "sha512-rTMAY4tKGBdbkHHQDaVhXNJg9tRmW7ihRAg7NQHiPUv13NFYBygIr+OYgpVNwSnGOH146BgCITSBAoMxMQGPTQ==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-eslint/-/plugin-eslint-8.0.1.tgz" - "version" "8.0.1" - dependencies: - "@rollup/pluginutils" "^4.0.0" - "eslint" "^7.12.0" - -"@rollup/plugin-node-resolve@^13.0.0": - "integrity" "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz" - "version" "13.1.3" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + +"@rollup/plugin-json@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" + integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - "builtin-modules" "^3.1.0" - "deepmerge" "^4.2.2" - "is-module" "^1.0.0" - "resolve" "^1.19.0" + "@rollup/pluginutils" "^3.0.8" -"@rollup/plugin-replace@^2.4.2": - "integrity" "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz" - "version" "2.4.2" +"@rollup/plugin-node-resolve@^11.0.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== dependencies: "@rollup/pluginutils" "^3.1.0" - "magic-string" "^0.25.7" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" -"@rollup/pluginutils@^3.1.0": - "integrity" "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==" - "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" - "version" "3.1.0" +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== dependencies: "@types/estree" "0.0.39" - "estree-walker" "^1.0.1" - "picomatch" "^2.2.2" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" -"@rollup/pluginutils@^4.0.0": - "integrity" "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==" - "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz" - "version" "4.1.0" +"@surma/rollup-plugin-off-main-thread@^2.2.2": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== dependencies: - "estree-walker" "^2.0.1" - "picomatch" "^2.2.2" + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" "@tootallnate/once@1": - "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/estree@*", "@types/estree@0.0.39": - "integrity" "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" - "version" "0.0.39" + version "0.0.39" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/json5@^0.0.29": - "integrity" "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - "version" "0.0.29" + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/minimist@^1.2.0": - "integrity" "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" - "resolved" "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz" - "version" "1.2.1" + version "1.2.1" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*": - "integrity" "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz" - "version" "14.14.41" + version "14.14.41" + resolved "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz" + integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g== "@types/normalize-package-data@^2.4.0": - "integrity" "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" - "resolved" "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" - "version" "2.4.0" + version "2.4.0" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/resolve@1.17.1": - "integrity" "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==" - "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" - "version" "1.17.1" + version "1.17.1" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== dependencies: "@types/node" "*" -"abbrev@1": - "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - "version" "1.1.1" - -"acorn-jsx@^5.3.1": - "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - "version" "5.3.2" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.4.0": - "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - "version" "7.4.1" - -"agent-base@^6.0.2", "agent-base@6": - "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" - "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "debug" "4" - -"agentkeepalive@^4.1.3": - "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" - "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "debug" "^4.1.0" - "depd" "^1.1.2" - "humanize-ms" "^1.2.1" - -"aggregate-error@^3.0.0": - "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" - "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "clean-stack" "^2.0.0" - "indent-string" "^4.0.0" - -"ajv@^6.10.0", "ajv@^6.12.3", "ajv@^6.12.4": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"ajv@^8.0.1": - "integrity" "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz" - "version" "8.10.0" - dependencies: - "fast-deep-equal" "^3.1.1" - "json-schema-traverse" "^1.0.0" - "require-from-string" "^2.0.2" - "uri-js" "^4.2.2" - -"ansi-colors@^1.0.1": - "integrity" "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "ansi-wrap" "^0.1.0" - -"ansi-colors@^4.1.1": - "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - "version" "4.1.1" - -"ansi-gray@^0.1.1": - "integrity" "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=" - "resolved" "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "ansi-wrap" "0.1.0" - -"ansi-regex@^2.0.0": - "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - "version" "2.1.1" - -"ansi-regex@^5.0.1": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" - -"ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^4.0.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"ansi-styles@^4.1.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"ansi-wrap@^0.1.0", "ansi-wrap@0.1.0": - "integrity" "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" - "resolved" "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" - "version" "0.1.0" +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.8.2: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.10.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz" + integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" -"anymatch@^2.0.0": - "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "micromatch" "^3.1.4" - "normalize-path" "^2.1.1" +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz" + integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +asyncro@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e" + integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg== + +autoprefixer@^10.1.0, autoprefixer@^10.4.14: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +babel-plugin-macros@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +babel-plugin-polyfill-corejs2@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b" + integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.1" + "@nicolo-ribaudo/semver-v6" "^6.3.3" + +babel-plugin-polyfill-corejs3@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e" + integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.1" + core-js-compat "^3.31.0" + +babel-plugin-polyfill-regenerator@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3" + integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.1" + +babel-plugin-transform-async-to-promises@^0.8.18: + version "0.8.18" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.18.tgz#f4dc5980b8afa0fc9c784b8d931afde913413e39" + integrity sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw== + +babel-plugin-transform-replace-expressions@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-replace-expressions/-/babel-plugin-transform-replace-expressions-0.2.0.tgz#59cba8df4b4a675e7c78cd21548f8e7685bbc30d" + integrity sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA== + dependencies: + "@babel/parser" "^7.3.3" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brotli-size@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e" + integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA== + dependencies: + duplexer "0.1.1" + +browserslist@^4.0.0, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9: + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== + dependencies: + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -"append-buffer@^1.0.2": - "integrity" "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=" - "resolved" "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "buffer-equal" "^1.0.0" +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== -"aproba@^1.0.3 || ^2.0.0": - "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - "version" "2.0.0" - -"archy@^1.0.0": - "integrity" "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" - "resolved" "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" - "version" "1.0.0" - -"are-we-there-yet@^2.0.0": - "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"are-we-there-yet@^3.0.0": - "integrity" "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"argparse@^1.0.7": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"arr-diff@^4.0.0": - "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - "version" "4.0.0" - -"arr-filter@^1.1.1": - "integrity" "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=" - "resolved" "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "make-iterator" "^1.0.0" - -"arr-flatten@^1.0.1", "arr-flatten@^1.1.0": - "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - "version" "1.1.0" - -"arr-map@^2.0.0", "arr-map@^2.0.2": - "integrity" "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=" - "resolved" "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "make-iterator" "^1.0.0" - -"arr-union@^3.1.0": - "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - "version" "3.1.0" - -"array-buffer-byte-length@^1.0.0": - "integrity" "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==" - "resolved" "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "call-bind" "^1.0.2" - "is-array-buffer" "^3.0.1" - -"array-each@^1.0.0", "array-each@^1.0.1": - "integrity" "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" - "resolved" "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz" - "version" "1.0.1" - -"array-includes@^3.1.6": - "integrity" "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==" - "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" - "version" "3.1.6" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - "get-intrinsic" "^1.1.3" - "is-string" "^1.0.7" - -"array-initial@^1.0.0": - "integrity" "sha1-L6dLJnOTccOUe9enrcc74zSz15U=" - "resolved" "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "array-slice" "^1.0.0" - "is-number" "^4.0.0" - -"array-last@^1.1.1": - "integrity" "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==" - "resolved" "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "is-number" "^4.0.0" - -"array-slice@^1.0.0": - "integrity" "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" - "resolved" "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz" - "version" "1.1.0" - -"array-sort@^1.0.0": - "integrity" "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==" - "resolved" "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "default-compare" "^1.0.0" - "get-value" "^2.0.6" - "kind-of" "^5.0.2" - -"array-unique@^0.3.2": - "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - "version" "0.3.2" - -"array.prototype.flat@^1.3.1": - "integrity" "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==" - "resolved" "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - "es-shim-unscopables" "^1.0.0" - -"array.prototype.flatmap@^1.3.1": - "integrity" "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==" - "resolved" "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - "es-shim-unscopables" "^1.0.0" - -"arrify@^1.0.1": - "integrity" "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - "version" "1.0.1" - -"asn1@~0.2.3": - "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" - "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - "version" "0.2.6" - dependencies: - "safer-buffer" "~2.1.0" - -"assert-plus@^1.0.0", "assert-plus@1.0.0": - "integrity" "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - "version" "1.0.0" - -"assign-symbols@^1.0.0": - "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - "version" "1.0.0" - -"astral-regex@^2.0.0": - "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - "version" "2.0.0" - -"async-done@^1.2.0", "async-done@^1.2.2": - "integrity" "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==" - "resolved" "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.2" - "process-nextick-args" "^2.0.0" - "stream-exhaust" "^1.0.1" - -"async-each@^1.0.1": - "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - "resolved" "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" - "version" "1.0.3" - -"async-foreach@^0.1.3": - "integrity" "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" - "resolved" "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz" - "version" "0.1.3" - -"async-settle@^1.0.0": - "integrity" "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=" - "resolved" "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "async-done" "^1.2.2" - -"asynckit@^0.4.0": - "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - "version" "0.4.0" - -"atob@^2.1.2": - "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - "version" "2.1.2" - -"autoprefixer@^10.2.6": - "integrity" "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==" - "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz" - "version" "10.4.2" - dependencies: - "browserslist" "^4.19.1" - "caniuse-lite" "^1.0.30001297" - "fraction.js" "^4.1.2" - "normalize-range" "^0.1.2" - "picocolors" "^1.0.0" - "postcss-value-parser" "^4.2.0" - -"available-typed-arrays@^1.0.5": - "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - "version" "1.0.5" - -"aws-sign2@~0.7.0": - "integrity" "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - "version" "0.7.0" - -"aws4@^1.8.0": - "integrity" "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - "resolved" "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" - "version" "1.11.0" - -"babel-plugin-dynamic-import-node@^2.3.3": - "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" - "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - "version" "2.3.3" - dependencies: - "object.assign" "^4.1.0" - -"babel-plugin-polyfill-corejs2@^0.3.0": - "integrity" "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - "semver" "^6.1.1" - -"babel-plugin-polyfill-corejs3@^0.5.0": - "integrity" "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz" - "version" "0.5.2" - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - "core-js-compat" "^3.21.0" - -"babel-plugin-polyfill-regenerator@^0.3.0": - "integrity" "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - -"bach@^1.0.0": - "integrity" "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=" - "resolved" "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "arr-filter" "^1.1.1" - "arr-flatten" "^1.0.1" - "arr-map" "^2.0.0" - "array-each" "^1.0.0" - "array-initial" "^1.0.0" - "array-last" "^1.1.1" - "async-done" "^1.2.2" - "async-settle" "^1.0.0" - "now-and-later" "^2.0.0" - -"balanced-match@^1.0.0": - "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - "version" "1.0.2" - -"base@^0.11.1": - "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" - "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - "version" "0.11.2" - dependencies: - "cache-base" "^1.0.1" - "class-utils" "^0.3.5" - "component-emitter" "^1.2.1" - "define-property" "^1.0.0" - "isobject" "^3.0.1" - "mixin-deep" "^1.2.0" - "pascalcase" "^0.1.1" - -"bcrypt-pbkdf@^1.0.0": - "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=" - "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "tweetnacl" "^0.14.3" - -"binary-extensions@^1.0.0": - "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" - "version" "1.13.1" - -"bowser@^2.11.0": - "integrity" "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - "resolved" "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" - "version" "2.11.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"braces@^2.3.1", "braces@^2.3.2": - "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" - "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "arr-flatten" "^1.1.0" - "array-unique" "^0.3.2" - "extend-shallow" "^2.0.1" - "fill-range" "^4.0.0" - "isobject" "^3.0.1" - "repeat-element" "^1.1.2" - "snapdragon" "^0.8.1" - "snapdragon-node" "^2.0.1" - "split-string" "^3.0.2" - "to-regex" "^3.0.1" - -"browserslist@^4.17.5", "browserslist@^4.19.1": - "integrity" "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz" - "version" "4.20.0" - dependencies: - "caniuse-lite" "^1.0.30001313" - "electron-to-chromium" "^1.4.76" - "escalade" "^3.1.1" - "node-releases" "^2.0.2" - "picocolors" "^1.0.0" - -"buffer-equal@^1.0.0": - "integrity" "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" - "resolved" "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz" - "version" "1.0.0" - -"buffer-from@^1.0.0": - "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - "version" "1.1.1" - -"builtin-modules@^3.1.0": - "integrity" "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" - "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" - "version" "3.2.0" - -"cacache@^15.2.0": - "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" - "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" - "version" "15.3.0" +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "glob" "^7.1.4" - "infer-owner" "^1.0.4" - "lru-cache" "^6.0.0" - "minipass" "^3.1.1" - "minipass-collect" "^1.0.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.2" - "mkdirp" "^1.0.3" - "p-map" "^4.0.0" - "promise-inflight" "^1.0.1" - "rimraf" "^3.0.2" - "ssri" "^8.0.1" - "tar" "^6.0.2" - "unique-filename" "^1.1.1" - -"cache-base@^1.0.1": - "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" - "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "collection-visit" "^1.0.0" - "component-emitter" "^1.2.1" - "get-value" "^2.0.6" - "has-value" "^1.0.0" - "isobject" "^3.0.1" - "set-value" "^2.0.0" - "to-object-path" "^0.3.0" - "union-value" "^1.0.0" - "unset-value" "^1.0.0" - -"call-bind@^1.0.0", "call-bind@^1.0.2": - "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" - "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "function-bind" "^1.1.1" - "get-intrinsic" "^1.0.2" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"camelcase-keys@^6.2.2": - "integrity" "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==" - "resolved" "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" - "version" "6.2.2" - dependencies: - "camelcase" "^5.3.1" - "map-obj" "^4.0.0" - "quick-lru" "^4.0.1" - -"camelcase@^3.0.0": - "integrity" "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" - "version" "3.0.0" - -"camelcase@^5.3.1": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - -"caniuse-lite@^1.0.30001297", "caniuse-lite@^1.0.30001313": - "integrity" "sha512-sY2B5Qyl46ZzfYDegrl8GBCzdawSLT4ThM9b9F+aDYUrAG2zCOyMbd2Tq34mS1g4ZKBfjRlzOohQMxx28x6wJg==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001494.tgz" - "version" "1.0.30001494" - -"caseless@~0.12.0": - "integrity" "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - "resolved" "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - "version" "0.12.0" - -"chalk@^2.0.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^4.0.0": - "integrity" "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chalk@^4.1.2": - "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chokidar@^2.0.0": - "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" - "version" "2.1.8" - dependencies: - "anymatch" "^2.0.0" - "async-each" "^1.0.1" - "braces" "^2.3.2" - "glob-parent" "^3.1.0" - "inherits" "^2.0.3" - "is-binary-path" "^1.0.0" - "is-glob" "^4.0.0" - "normalize-path" "^3.0.0" - "path-is-absolute" "^1.0.0" - "readdirp" "^2.2.1" - "upath" "^1.1.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: + version "1.0.30001517" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz#90fabae294215c3495807eb24fc809e11dc2f0a8" + integrity sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.3.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" optionalDependencies: - "fsevents" "^1.2.7" - -"chownr@^2.0.0": - "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - "version" "2.0.0" - -"class-utils@^0.3.5": - "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" - "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - "version" "0.3.6" - dependencies: - "arr-union" "^3.1.0" - "define-property" "^0.2.5" - "isobject" "^3.0.0" - "static-extend" "^0.1.1" - -"clean-stack@^2.0.0": - "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - "version" "2.2.0" - -"cliui@^3.2.0": - "integrity" "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "string-width" "^1.0.1" - "strip-ansi" "^3.0.1" - "wrap-ansi" "^2.0.0" - -"cliui@^7.0.2": - "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - "version" "7.0.4" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^7.0.0" - -"clone-buffer@^1.0.0": - "integrity" "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" - "resolved" "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" - "version" "1.0.0" - -"clone-stats@^1.0.0": - "integrity" "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" - "resolved" "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" - "version" "1.0.0" - -"clone@^2.1.1": - "integrity" "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" - "version" "2.1.2" - -"cloneable-readable@^1.0.0": - "integrity" "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==" - "resolved" "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "inherits" "^2.0.1" - "process-nextick-args" "^2.0.0" - "readable-stream" "^2.3.5" - -"code-point-at@^1.0.0": - "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" - "version" "1.1.0" - -"collection-map@^1.0.0": - "integrity" "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=" - "resolved" "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "arr-map" "^2.0.2" - "for-own" "^1.0.0" - "make-iterator" "^1.0.0" - -"collection-visit@^1.0.0": - "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" - "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "map-visit" "^1.0.0" - "object-visit" "^1.0.0" - -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"color-support@^1.1.2", "color-support@^1.1.3": - "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - "version" "1.1.3" - -"combined-stream@^1.0.6", "combined-stream@~1.0.6": - "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" - "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - "version" "1.0.8" - dependencies: - "delayed-stream" "~1.0.0" - -"commander@^2.20.0": - "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - "version" "2.20.3" - -"commondir@^1.0.1": - "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - "version" "1.0.1" - -"component-emitter@^1.2.1": - "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - "version" "1.3.0" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"concat-stream@^1.6.0": - "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" - "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - "version" "1.6.2" - dependencies: - "buffer-from" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^2.2.2" - "typedarray" "^0.0.6" - -"console-control-strings@^1.0.0", "console-control-strings@^1.1.0": - "integrity" "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - "version" "1.1.0" - -"convert-source-map@^1.5.0", "convert-source-map@^1.7.0": - "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "safe-buffer" "~5.1.1" - -"copy-descriptor@^0.1.0": - "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - "version" "0.1.1" - -"copy-props@^2.0.1": - "integrity" "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==" - "resolved" "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "each-props" "^1.3.2" - "is-plain-object" "^5.0.0" - -"core-js-compat@^3.20.2", "core-js-compat@^3.21.0": - "integrity" "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==" - "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz" - "version" "3.21.1" - dependencies: - "browserslist" "^4.19.1" - "semver" "7.0.0" - -"core-js@^3.15.2": - "integrity" "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==" - "resolved" "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz" - "version" "3.21.1" - -"core-util-is@~1.0.0", "core-util-is@1.0.2": - "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"d@^1.0.1", "d@1": - "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" - "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "es5-ext" "^0.10.50" - "type" "^1.0.1" - -"dashdash@^1.12.0": - "integrity" "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=" - "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - "version" "1.14.1" - dependencies: - "assert-plus" "^1.0.0" - -"debug@^2.2.0": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.3.3": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^3.2.7": - "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - "version" "3.2.7" - dependencies: - "ms" "^2.1.1" - -"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@4": - "integrity" "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" - "version" "4.3.3" - dependencies: - "ms" "2.1.2" - -"decamelize-keys@^1.1.0": - "integrity" "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=" - "resolved" "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "decamelize" "^1.1.0" - "map-obj" "^1.0.0" - -"decamelize@^1.1.0", "decamelize@^1.1.1", "decamelize@^1.2.0": - "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - -"decode-uri-component@^0.2.0": - "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - "version" "0.2.0" - -"deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" - -"deepmerge@^4.2.2": - "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - "version" "4.2.2" - -"default-compare@^1.0.0": - "integrity" "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==" - "resolved" "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^5.0.2" - -"default-resolution@^2.0.0": - "integrity" "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" - "resolved" "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz" - "version" "2.0.0" - -"define-properties@^1.1.3", "define-properties@^1.1.4", "define-properties@^1.2.0": - "integrity" "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "has-property-descriptors" "^1.0.0" - "object-keys" "^1.1.1" - -"define-property@^0.2.5": - "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - "version" "0.2.5" - dependencies: - "is-descriptor" "^0.1.0" - -"define-property@^1.0.0": - "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-descriptor" "^1.0.0" - -"define-property@^2.0.2": - "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "is-descriptor" "^1.0.2" - "isobject" "^3.0.1" - -"delayed-stream@~1.0.0": - "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - "version" "1.0.0" - -"delegates@^1.0.0": - "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - "version" "1.0.0" - -"depd@^1.1.2": - "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"detect-file@^1.0.0": - "integrity" "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" - "resolved" "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" - "version" "1.0.0" - -"doctrine@^2.1.0": - "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "esutils" "^2.0.2" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"duplexify@^3.6.0": - "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==" - "resolved" "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" - "version" "3.7.1" - dependencies: - "end-of-stream" "^1.0.0" - "inherits" "^2.0.1" - "readable-stream" "^2.0.0" - "stream-shift" "^1.0.0" - -"each-props@^1.3.2": - "integrity" "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==" - "resolved" "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-plain-object" "^2.0.1" - "object.defaults" "^1.1.0" - -"ecc-jsbn@~0.1.1": - "integrity" "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=" - "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "jsbn" "~0.1.0" - "safer-buffer" "^2.1.0" - -"electron-to-chromium@^1.4.76": - "integrity" "sha512-fiDxw8mO9Ph1Z0bjX2sFTPpi0J0QkOiwOJF+5Q0J0baNc/F9lLePAvDPlnoxvbUYYMizqrKPeotRRkJ9LtxAew==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.77.tgz" - "version" "1.4.77" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"encoding@^0.1.12": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" - dependencies: - "iconv-lite" "^0.6.2" - -"end-of-stream@^1.0.0", "end-of-stream@^1.1.0": - "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "once" "^1.4.0" - -"enquirer@^2.3.5": - "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" - "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - "version" "2.3.6" - dependencies: - "ansi-colors" "^4.1.1" - -"env-paths@^2.2.0": - "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - "version" "2.2.1" - -"err-code@^2.0.2": - "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - "version" "2.0.3" - -"error-ex@^1.2.0", "error-ex@^1.3.1": - "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" - "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-arrayish" "^0.2.1" - -"es-abstract@^1.19.0", "es-abstract@^1.20.4": - "integrity" "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz" - "version" "1.21.2" - dependencies: - "array-buffer-byte-length" "^1.0.0" - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "es-set-tostringtag" "^2.0.1" - "es-to-primitive" "^1.2.1" - "function.prototype.name" "^1.1.5" - "get-intrinsic" "^1.2.0" - "get-symbol-description" "^1.0.0" - "globalthis" "^1.0.3" - "gopd" "^1.0.1" - "has" "^1.0.3" - "has-property-descriptors" "^1.0.0" - "has-proto" "^1.0.1" - "has-symbols" "^1.0.3" - "internal-slot" "^1.0.5" - "is-array-buffer" "^3.0.2" - "is-callable" "^1.2.7" - "is-negative-zero" "^2.0.2" - "is-regex" "^1.1.4" - "is-shared-array-buffer" "^1.0.2" - "is-string" "^1.0.7" - "is-typed-array" "^1.1.10" - "is-weakref" "^1.0.2" - "object-inspect" "^1.12.3" - "object-keys" "^1.1.1" - "object.assign" "^4.1.4" - "regexp.prototype.flags" "^1.4.3" - "safe-regex-test" "^1.0.0" - "string.prototype.trim" "^1.2.7" - "string.prototype.trimend" "^1.0.6" - "string.prototype.trimstart" "^1.0.6" - "typed-array-length" "^1.0.4" - "unbox-primitive" "^1.0.2" - "which-typed-array" "^1.1.9" - -"es-set-tostringtag@^2.0.1": - "integrity" "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==" - "resolved" "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "get-intrinsic" "^1.1.3" - "has" "^1.0.3" - "has-tostringtag" "^1.0.0" - -"es-shim-unscopables@^1.0.0": - "integrity" "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==" - "resolved" "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has" "^1.0.3" - -"es-to-primitive@^1.2.1": - "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" - "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "is-callable" "^1.1.4" - "is-date-object" "^1.0.1" - "is-symbol" "^1.0.2" - -"es5-ext@^0.10.35", "es5-ext@^0.10.46", "es5-ext@^0.10.50": - "integrity" "sha512-YUhqzoMnIjMW5y8FzaMxsCu0eWCwq32GrlwhOhbQmL5OiZReWFm/KvRiYuvqf3CaG/zZ36Kyb4KfVe674cafCQ==" - "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.56.tgz" - "version" "0.10.56" - dependencies: - "es6-iterator" "^2.0.3" - "es6-symbol" "^3.1.3" - "next-tick" "^1.1.0" - -"es6-iterator@^2.0.1", "es6-iterator@^2.0.3": - "integrity" "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=" - "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "d" "1" - "es5-ext" "^0.10.35" - "es6-symbol" "^3.1.1" - -"es6-symbol@^3.1.1", "es6-symbol@^3.1.3": - "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" - "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" - "version" "3.1.3" - dependencies: - "d" "^1.0.1" - "ext" "^1.1.2" - -"es6-weak-map@^2.0.1": - "integrity" "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==" - "resolved" "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "d" "1" - "es5-ext" "^0.10.46" - "es6-iterator" "^2.0.3" - "es6-symbol" "^3.1.1" - -"escalade@^3.1.1": - "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - "version" "3.1.1" - -"escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"eslint-config-standard@^16.0.3": - "integrity" "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==" - "resolved" "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz" - "version" "16.0.3" - -"eslint-import-resolver-node@^0.3.7": - "integrity" "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==" - "resolved" "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz" - "version" "0.3.7" - dependencies: - "debug" "^3.2.7" - "is-core-module" "^2.11.0" - "resolve" "^1.22.1" - -"eslint-module-utils@^2.7.4": - "integrity" "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==" - "resolved" "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" - "version" "2.8.0" - dependencies: - "debug" "^3.2.7" - -"eslint-plugin-es@^3.0.0": - "integrity" "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==" - "resolved" "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "eslint-utils" "^2.0.0" - "regexpp" "^3.0.0" - -"eslint-plugin-import@^2.22.1", "eslint-plugin-import@^2.27.5": - "integrity" "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==" - "resolved" "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" - "version" "2.27.5" - dependencies: - "array-includes" "^3.1.6" - "array.prototype.flat" "^1.3.1" - "array.prototype.flatmap" "^1.3.1" - "debug" "^3.2.7" - "doctrine" "^2.1.0" - "eslint-import-resolver-node" "^0.3.7" - "eslint-module-utils" "^2.7.4" - "has" "^1.0.3" - "is-core-module" "^2.11.0" - "is-glob" "^4.0.3" - "minimatch" "^3.1.2" - "object.values" "^1.1.6" - "resolve" "^1.22.1" - "semver" "^6.3.0" - "tsconfig-paths" "^3.14.1" - -"eslint-plugin-node@^11.1.0": - "integrity" "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==" - "resolved" "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz" - "version" "11.1.0" - dependencies: - "eslint-plugin-es" "^3.0.0" - "eslint-utils" "^2.0.0" - "ignore" "^5.1.1" - "minimatch" "^3.0.4" - "resolve" "^1.10.1" - "semver" "^6.1.0" - -"eslint-plugin-promise@^4.2.1 || ^5.0.0", "eslint-plugin-promise@^6.1.1": - "integrity" "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==" - "resolved" "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz" - "version" "6.1.1" - -"eslint-scope@^5.1.1": - "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^4.1.1" - -"eslint-utils@^2.0.0", "eslint-utils@^2.1.0": - "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "eslint-visitor-keys" "^1.1.0" - -"eslint-visitor-keys@^1.1.0": - "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - "version" "1.3.0" - -"eslint-visitor-keys@^1.3.0": - "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - "version" "1.3.0" - -"eslint-visitor-keys@^2.0.0", "eslint-visitor-keys@^2.1.0": - "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - "version" "2.1.0" - -"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.12.0", "eslint@^7.12.1", "eslint@^7.29.0", "eslint@^7.5.0 || ^8.0.0", "eslint@>=4.19.1", "eslint@>=5.16.0": - "integrity" "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" - "version" "7.32.0" + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-with-sourcemaps@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" + integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== + dependencies: + source-map "^0.6.1" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +core-js-compat@^3.31.0: + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0" + integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA== + dependencies: + browserslist "^4.21.9" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-declaration-sorter@^6.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" + integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.0.1: + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== + dependencies: + cssnano-preset-default "^5.2.14" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: + version "4.3.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dependency-graph@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" + integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +duplexer@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q== + +duplexer@^0.1.1, duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ejs@^3.1.6: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.431: + version "1.4.467" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.467.tgz#b0660bf644baff7eedea33b8c742fb53ec60e3c2" + integrity sha512-2qI70O+rR4poYeF2grcuS/bCps5KJh6y1jtZMDDEteyKJQrzLOEhFyXCLcHW6DTBjKjWkk26JhWoAi+Ux9A0fg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-standard@^16.0.3: + version "16.0.3" + resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz" + integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== + +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-module-utils@^2.7.4: + version "2.8.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.27.5: + version "2.27.5" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.29.0: + version "7.32.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.3" "@humanwhocodes/config-array" "^0.5.0" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.0.1" - "doctrine" "^3.0.0" - "enquirer" "^2.3.5" - "escape-string-regexp" "^4.0.0" - "eslint-scope" "^5.1.1" - "eslint-utils" "^2.1.0" - "eslint-visitor-keys" "^2.0.0" - "espree" "^7.3.1" - "esquery" "^1.4.0" - "esutils" "^2.0.2" - "fast-deep-equal" "^3.1.3" - "file-entry-cache" "^6.0.1" - "functional-red-black-tree" "^1.0.1" - "glob-parent" "^5.1.2" - "globals" "^13.6.0" - "ignore" "^4.0.6" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "js-yaml" "^3.13.1" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash.merge" "^4.6.2" - "minimatch" "^3.0.4" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "progress" "^2.0.0" - "regexpp" "^3.1.0" - "semver" "^7.2.1" - "strip-ansi" "^6.0.0" - "strip-json-comments" "^3.1.0" - "table" "^6.0.9" - "text-table" "^0.2.0" - "v8-compile-cache" "^2.0.3" - -"espree@^7.3.0", "espree@^7.3.1": - "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==" - "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" - "version" "7.3.1" - dependencies: - "acorn" "^7.4.0" - "acorn-jsx" "^5.3.1" - "eslint-visitor-keys" "^1.3.0" - -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" - -"esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^4.1.1": - "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - "version" "4.3.0" - -"estraverse@^5.1.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"estraverse@^5.2.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"estree-walker@^1.0.1": - "integrity" "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" - "version" "1.0.1" - -"estree-walker@^2.0.1": - "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" - "version" "2.0.2" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"expand-brackets@^2.1.4": - "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" - "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - "version" "2.1.4" - dependencies: - "debug" "^2.3.3" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "posix-character-classes" "^0.1.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"expand-tilde@^2.0.0", "expand-tilde@^2.0.2": - "integrity" "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=" - "resolved" "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "homedir-polyfill" "^1.0.1" - -"ext@^1.1.2": - "integrity" "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==" - "resolved" "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "type" "^2.5.0" - -"extend-shallow@^2.0.1": - "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "is-extendable" "^0.1.0" - -"extend-shallow@^3.0.0", "extend-shallow@^3.0.2": - "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "assign-symbols" "^1.0.0" - "is-extendable" "^1.0.1" - -"extend@^3.0.0", "extend@~3.0.2": - "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - "version" "3.0.2" - -"extglob@^2.0.4": - "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" - "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "array-unique" "^0.3.2" - "define-property" "^1.0.0" - "expand-brackets" "^2.1.4" - "extend-shallow" "^2.0.1" - "fragment-cache" "^0.2.1" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"extsprintf@^1.2.0", "extsprintf@1.3.0": - "integrity" "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - "version" "1.3.0" - -"fancy-log@^1.3.2", "fancy-log@^1.3.3": - "integrity" "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==" - "resolved" "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz" - "version" "1.3.3" - dependencies: - "ansi-gray" "^0.1.1" - "color-support" "^1.1.3" - "parse-node-version" "^1.0.0" - "time-stamp" "^1.0.0" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^1.0.0": - "integrity" "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz" - "version" "1.1.4" - -"fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"fill-range@^4.0.0": - "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "extend-shallow" "^2.0.1" - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" - "to-regex-range" "^2.1.0" - -"find-up@^1.0.0": - "integrity" "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "path-exists" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"find-up@^4.1.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" - -"findup-sync@^2.0.0": - "integrity" "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=" - "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "detect-file" "^1.0.0" - "is-glob" "^3.1.0" - "micromatch" "^3.0.4" - "resolve-dir" "^1.0.1" - -"findup-sync@^3.0.0": - "integrity" "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==" - "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "detect-file" "^1.0.0" - "is-glob" "^4.0.0" - "micromatch" "^3.0.4" - "resolve-dir" "^1.0.1" - -"fined@^1.0.1": - "integrity" "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==" - "resolved" "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "expand-tilde" "^2.0.2" - "is-plain-object" "^2.0.3" - "object.defaults" "^1.1.0" - "object.pick" "^1.2.0" - "parse-filepath" "^1.0.1" - -"flagged-respawn@^1.0.0": - "integrity" "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" - "resolved" "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" - "version" "1.0.1" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - "version" "3.1.1" - -"flush-write-stream@^1.0.2": - "integrity" "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==" - "resolved" "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "inherits" "^2.0.3" - "readable-stream" "^2.3.6" - -"for-each@^0.3.3": - "integrity" "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==" - "resolved" "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - "version" "0.3.3" - dependencies: - "is-callable" "^1.1.3" - -"for-in@^1.0.1", "for-in@^1.0.2": - "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - "version" "1.0.2" - -"for-own@^1.0.0": - "integrity" "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=" - "resolved" "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "for-in" "^1.0.1" - -"forever-agent@~0.6.1": - "integrity" "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - "version" "0.6.1" - -"form-data@~2.3.2": - "integrity" "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - "version" "2.3.3" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.6" - "mime-types" "^2.1.12" - -"fraction.js@^4.1.2": - "integrity" "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" - "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" - "version" "4.2.0" - -"fragment-cache@^0.2.1": - "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" - "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "map-cache" "^0.2.2" - -"fs-minipass@^2.0.0": - "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "minipass" "^3.0.0" - -"fs-mkdirp-stream@^1.0.0": - "integrity" "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=" - "resolved" "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "graceful-fs" "^4.1.11" - "through2" "^2.0.3" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" - -"function.prototype.name@^1.1.5": - "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" - "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.19.0" - "functions-have-names" "^1.2.2" - -"functional-red-black-tree@^1.0.1": - "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - "version" "1.0.1" - -"functions-have-names@^1.2.2", "functions-have-names@^1.2.3": - "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - "version" "1.2.3" - -"gauge@^3.0.0": - "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.2" - "console-control-strings" "^1.0.0" - "has-unicode" "^2.0.1" - "object-assign" "^4.1.1" - "signal-exit" "^3.0.0" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.2" - -"gauge@^4.0.0": - "integrity" "sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "ansi-regex" "^5.0.1" - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.3" - "console-control-strings" "^1.1.0" - "has-unicode" "^2.0.1" - "signal-exit" "^3.0.7" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.5" - -"gaze@^1.0.0": - "integrity" "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==" - "resolved" "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "globule" "^1.0.0" - -"gensync@^1.0.0-beta.2": - "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - "version" "1.0.0-beta.2" - -"get-caller-file@^1.0.1": - "integrity" "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz" - "version" "1.0.3" - -"get-caller-file@^2.0.5": - "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - "version" "2.0.5" - -"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1", "get-intrinsic@^1.1.3", "get-intrinsic@^1.2.0": - "integrity" "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==" - "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "function-bind" "^1.1.1" - "has" "^1.0.3" - "has-proto" "^1.0.1" - "has-symbols" "^1.0.3" - -"get-stdin@^4.0.1": - "integrity" "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" - "version" "4.0.1" - -"get-symbol-description@^1.0.0": - "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" - "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.1.1" - -"get-value@^2.0.3", "get-value@^2.0.6": - "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - "version" "2.0.6" - -"getpass@^0.1.1": - "integrity" "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=" - "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - "version" "0.1.7" - dependencies: - "assert-plus" "^1.0.0" - -"glob-parent@^3.1.0": - "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "is-glob" "^3.1.0" - "path-dirname" "^1.0.0" - -"glob-parent@^5.1.2": - "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob-stream@^6.1.0": - "integrity" "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=" - "resolved" "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "extend" "^3.0.0" - "glob" "^7.1.1" - "glob-parent" "^3.1.0" - "is-negated-glob" "^1.0.0" - "ordered-read-streams" "^1.0.0" - "pumpify" "^1.3.5" - "readable-stream" "^2.1.5" - "remove-trailing-separator" "^1.0.1" - "to-absolute-glob" "^2.0.0" - "unique-stream" "^2.0.2" - -"glob-watcher@^5.0.3": - "integrity" "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==" - "resolved" "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz" - "version" "5.0.5" - dependencies: - "anymatch" "^2.0.0" - "async-done" "^1.2.0" - "chokidar" "^2.0.0" - "is-negated-glob" "^1.0.0" - "just-debounce" "^1.0.0" - "normalize-path" "^3.0.0" - "object.defaults" "^1.1.0" - -"glob@^7.0.0", "glob@^7.0.3", "glob@^7.1.1", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6", "glob@~7.1.1": - "integrity" "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - "version" "7.1.7" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"global-modules@^1.0.0": - "integrity" "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==" - "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "global-prefix" "^1.0.1" - "is-windows" "^1.0.1" - "resolve-dir" "^1.0.0" - -"global-prefix@^1.0.1": - "integrity" "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=" - "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "expand-tilde" "^2.0.2" - "homedir-polyfill" "^1.0.1" - "ini" "^1.3.4" - "is-windows" "^1.0.1" - "which" "^1.2.14" - -"globals@^11.1.0": - "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - "version" "11.12.0" - -"globals@^13.6.0": - "integrity" "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz" - "version" "13.9.0" - dependencies: - "type-fest" "^0.20.2" - -"globals@^13.9.0": - "integrity" "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz" - "version" "13.12.1" - dependencies: - "type-fest" "^0.20.2" - -"globalthis@^1.0.3": - "integrity" "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==" - "resolved" "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "define-properties" "^1.1.3" - -"globule@^1.0.0": - "integrity" "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==" - "resolved" "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "glob" "~7.1.1" - "lodash" "~4.17.10" - "minimatch" "~3.0.2" - -"glogg@^1.0.0": - "integrity" "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==" - "resolved" "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "sparkles" "^1.0.0" - -"gopd@^1.0.1": - "integrity" "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==" - "resolved" "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "get-intrinsic" "^1.1.3" - -"graceful-fs@^4.0.0", "graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.6": - "integrity" "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" - "version" "4.2.6" - -"gulp-autoprefixer@^8.0.0": - "integrity" "sha512-sVR++PIaXpa81p52dmmA/jt50bw0egmylK5mjagfgOJ8uLDGaF9tHyzvetkY9Uo0gBZUS5sVqN3kX/GlUKOyog==" - "resolved" "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-8.0.0.tgz" - "version" "8.0.0" - dependencies: - "autoprefixer" "^10.2.6" - "fancy-log" "^1.3.3" - "plugin-error" "^1.0.1" - "postcss" "^8.3.0" - "through2" "^4.0.2" - "vinyl-sourcemaps-apply" "^0.2.1" - -"gulp-cli@^2.2.0": - "integrity" "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==" - "resolved" "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "ansi-colors" "^1.0.1" - "archy" "^1.0.0" - "array-sort" "^1.0.0" - "color-support" "^1.1.3" - "concat-stream" "^1.6.0" - "copy-props" "^2.0.1" - "fancy-log" "^1.3.2" - "gulplog" "^1.0.0" - "interpret" "^1.4.0" - "isobject" "^3.0.1" - "liftoff" "^3.1.0" - "matchdep" "^2.0.0" - "mute-stdout" "^1.0.0" - "pretty-hrtime" "^1.0.0" - "replace-homedir" "^1.0.0" - "semver-greatest-satisfied-range" "^1.1.0" - "v8flags" "^3.2.0" - "yargs" "^7.1.0" - -"gulp-sass-glob@^1.1.0": - "integrity" "sha512-BYDCjb68iMAxLGt2uuw7jaZ51cnWxAbQ4EtFDOOsMXOc0Ul+SFW1iiMOSI/efpO27ycmX9U8Eb4Clerww5Tf5Q==" - "resolved" "https://registry.npmjs.org/gulp-sass-glob/-/gulp-sass-glob-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "glob" "^7.1.4" - "minimatch" "^3.0.4" - "slash" "^3.0.0" - "through2" "^3.0.1" - -"gulp-sass@^5.0.0": - "integrity" "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==" - "resolved" "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "lodash.clonedeep" "^4.5.0" - "picocolors" "^1.0.0" - "plugin-error" "^1.0.1" - "replace-ext" "^2.0.0" - "strip-ansi" "^6.0.1" - "vinyl-sourcemaps-apply" "^0.2.1" - -"gulp@^4.0.2", "gulp@>=4": - "integrity" "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==" - "resolved" "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "glob-watcher" "^5.0.3" - "gulp-cli" "^2.2.0" - "undertaker" "^1.2.1" - "vinyl-fs" "^3.0.0" - -"gulplog@^1.0.0": - "integrity" "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=" - "resolved" "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "glogg" "^1.0.0" - -"har-schema@^2.0.0": - "integrity" "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - "resolved" "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" - "version" "2.0.0" - -"har-validator@~5.1.3": - "integrity" "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==" - "resolved" "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" - "version" "5.1.5" - dependencies: - "ajv" "^6.12.3" - "har-schema" "^2.0.0" - -"hard-rejection@^2.1.0": - "integrity" "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" - "resolved" "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" - "version" "2.1.0" - -"has-bigints@^1.0.1", "has-bigints@^1.0.2": - "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - "version" "1.0.2" - -"has-flag@^3.0.0": - "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-property-descriptors@^1.0.0": - "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" - "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "get-intrinsic" "^1.1.1" - -"has-proto@^1.0.1": - "integrity" "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - "resolved" "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" - "version" "1.0.1" - -"has-symbols@^1.0.2", "has-symbols@^1.0.3": - "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - "version" "1.0.3" - -"has-tostringtag@^1.0.0": - "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" - "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has-symbols" "^1.0.2" - -"has-unicode@^2.0.1": - "integrity" "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - "version" "2.0.1" - -"has-value@^0.3.1": - "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "get-value" "^2.0.3" - "has-values" "^0.1.4" - "isobject" "^2.0.0" - -"has-value@^1.0.0": - "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "get-value" "^2.0.6" - "has-values" "^1.0.0" - "isobject" "^3.0.0" - -"has-values@^0.1.4": - "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - "version" "0.1.4" - -"has-values@^1.0.0": - "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-number" "^3.0.0" - "kind-of" "^4.0.0" - -"has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "function-bind" "^1.1.1" - -"homedir-polyfill@^1.0.1": - "integrity" "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==" - "resolved" "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "parse-passwd" "^1.0.0" - -"hosted-git-info@^2.1.4": - "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - "version" "2.8.9" - -"hosted-git-info@^4.0.1": - "integrity" "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "lru-cache" "^6.0.0" - -"http-cache-semantics@^4.1.0": - "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - "version" "4.1.0" - -"http-proxy-agent@^4.0.1": - "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" - "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "@tootallnate/once" "1" - "agent-base" "6" - "debug" "4" - -"http-signature@~1.2.0": - "integrity" "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=" - "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "assert-plus" "^1.0.0" - "jsprim" "^1.2.2" - "sshpk" "^1.7.0" - -"https-proxy-agent@^5.0.0": - "integrity" "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==" - "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "agent-base" "6" - "debug" "4" - -"humanize-ms@^1.2.1": - "integrity" "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=" - "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "ms" "^2.0.0" - -"iconv-lite@^0.6.2": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"ignore@^4.0.6": - "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - "version" "4.0.6" - -"ignore@^5.1.1": - "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - "version" "5.2.0" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"indent-string@^4.0.0": - "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - "version" "4.0.0" - -"infer-owner@^1.0.4": - "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - "version" "1.0.4" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.3", "inherits@2": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"ini@^1.3.4": - "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - "version" "1.3.8" - -"internal-slot@^1.0.5": - "integrity" "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==" - "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "get-intrinsic" "^1.2.0" - "has" "^1.0.3" - "side-channel" "^1.0.4" - -"interpret@^1.4.0": - "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - "version" "1.4.0" - -"invert-kv@^1.0.0": - "integrity" "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" - "version" "1.0.0" - -"ip@^1.1.5": - "integrity" "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - "resolved" "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz" - "version" "1.1.5" - -"is-absolute@^1.0.0": - "integrity" "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==" - "resolved" "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-relative" "^1.0.0" - "is-windows" "^1.0.1" - -"is-accessor-descriptor@^0.1.6": - "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "kind-of" "^3.0.2" - -"is-accessor-descriptor@^1.0.0": - "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^6.0.0" - -"is-array-buffer@^3.0.1", "is-array-buffer@^3.0.2": - "integrity" "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==" - "resolved" "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.2.0" - "is-typed-array" "^1.1.10" - -"is-arrayish@^0.2.1": - "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - "version" "0.2.1" - -"is-bigint@^1.0.1": - "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" - "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "has-bigints" "^1.0.1" - -"is-binary-path@^1.0.0": - "integrity" "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "binary-extensions" "^1.0.0" - -"is-boolean-object@^1.1.0": - "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" - "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-buffer@^1.1.5": - "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - "version" "1.1.6" - -"is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.7": - "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - "version" "1.2.7" - -"is-core-module@^2.11.0": - "integrity" "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" - "version" "2.12.1" - dependencies: - "has" "^1.0.3" - -"is-data-descriptor@^0.1.4": - "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" - "version" "0.1.4" - dependencies: - "kind-of" "^3.0.2" - -"is-data-descriptor@^1.0.0": - "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^6.0.0" - -"is-date-object@^1.0.1": - "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" - "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-descriptor@^0.1.0": - "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "is-accessor-descriptor" "^0.1.6" - "is-data-descriptor" "^0.1.4" - "kind-of" "^5.0.0" - -"is-descriptor@^1.0.0", "is-descriptor@^1.0.2": - "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "is-accessor-descriptor" "^1.0.0" - "is-data-descriptor" "^1.0.0" - "kind-of" "^6.0.2" - -"is-extendable@^0.1.0", "is-extendable@^0.1.1": - "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - "version" "0.1.1" - -"is-extendable@^0.1.1": - "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - "version" "0.1.1" - -"is-extendable@^1.0.1": - "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "is-plain-object" "^2.0.4" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" + integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +figures@^1.0.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filesize@^6.1.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" + integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz" + integrity sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA== + dependencies: + ansi-regex "^5.0.1" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +generic-names@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3" + integrity sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A== + dependencies: + loader-utils "^3.2.0" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stdin@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0: + version "13.9.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz" + integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== + dependencies: + type-fest "^0.20.2" + +globals@^13.9.0: + version "13.12.1" + resolved "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz" + integrity sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + +globby@^13.0.0: + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.3.0" + ignore "^5.2.4" + merge2 "^1.4.1" + slash "^4.0.0" + +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +globule@^1.0.0: + version "1.3.2" + resolved "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.6: + version "4.2.6" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w== + dependencies: + duplexer "^0.1.1" + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" -"is-extglob@^2.1.0", "is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -"is-fullwidth-code-point@^1.0.0": - "integrity" "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" - "version" "1.0.0" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: - "number-is-nan" "^1.0.0" + function-bind "^1.1.1" -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -"is-glob@^3.1.0": - "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" - "version" "3.1.0" +hosted-git-info@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: - "is-extglob" "^2.1.0" + lru-cache "^6.0.0" -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3": - "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "is-extglob" "^2.1.1" +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -"is-lambda@^1.0.1": - "integrity" "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=" - "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - "version" "1.0.1" - -"is-module@^1.0.0": - "integrity" "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" - "resolved" "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" - "version" "1.0.0" - -"is-negated-glob@^1.0.0": - "integrity" "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" - "resolved" "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz" - "version" "1.0.0" - -"is-negative-zero@^2.0.2": - "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" - "version" "2.0.2" - -"is-number-object@^1.0.4": - "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" - "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - "version" "1.0.7" +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: - "has-tostringtag" "^1.0.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg== + +icss-utils@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1: + version "5.2.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" + integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== + dependencies: + import-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== + dependencies: + resolve-from "^5.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== -"is-number@^3.0.0": - "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - "version" "3.0.0" +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: - "kind-of" "^3.0.2" - -"is-number@^4.0.0": - "integrity" "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" - "version" "4.0.0" + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -"is-plain-obj@^1.1.0": - "integrity" "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - "version" "1.1.0" - -"is-plain-object@^2.0.1", "is-plain-object@^2.0.3", "is-plain-object@^2.0.4": - "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "isobject" "^3.0.1" +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -"is-plain-object@^5.0.0": - "integrity" "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - "version" "5.0.0" - -"is-reference@^1.2.1": - "integrity" "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==" - "resolved" "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" - "version" "1.2.1" +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== dependencies: "@types/estree" "*" -"is-regex@^1.1.4": - "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" - "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-relative@^1.0.0": - "integrity" "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==" - "resolved" "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" - "version" "1.0.0" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: - "is-unc-path" "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" -"is-shared-array-buffer@^1.0.2": - "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" - "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" - "version" "1.0.2" +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: - "call-bind" "^1.0.2" + call-bind "^1.0.2" -"is-string@^1.0.5", "is-string@^1.0.7": - "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" - "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - "version" "1.0.7" +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: - "has-tostringtag" "^1.0.0" + has-tostringtag "^1.0.0" -"is-symbol@^1.0.2", "is-symbol@^1.0.3": - "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" - "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - "version" "1.0.4" +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - "has-symbols" "^1.0.2" + has-symbols "^1.0.2" -"is-typed-array@^1.1.10", "is-typed-array@^1.1.9": - "integrity" "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==" - "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" - "version" "1.1.10" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "for-each" "^0.3.3" - "gopd" "^1.0.1" - "has-tostringtag" "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" -"is-typedarray@~1.0.0": - "integrity" "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - "version" "1.0.0" +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -"is-unc-path@^1.0.0": - "integrity" "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==" - "resolved" "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" - "version" "1.0.0" +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: - "unc-path-regex" "^0.1.2" - -"is-utf8@^0.2.0", "is-utf8@^0.2.1": - "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - "version" "0.2.1" + call-bind "^1.0.2" -"is-valid-glob@^1.0.0": - "integrity" "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" - "resolved" "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz" - "version" "1.0.0" - -"is-weakref@^1.0.2": - "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" - "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - "version" "1.0.2" +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: - "call-bind" "^1.0.2" + is-docker "^2.0.0" -"is-windows@^1.0.1", "is-windows@^1.0.2": - "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - "version" "1.0.2" +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -"isarray@~1.0.0", "isarray@1.0.0": - "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -"isobject@^2.0.0": - "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - "version" "2.1.0" +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: - "isarray" "1.0.0" - -"isobject@^3.0.0", "isobject@^3.0.1": - "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - "version" "3.0.1" - -"isstream@~0.1.2": - "integrity" "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - "resolved" "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - "version" "0.1.2" + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" -"jest-worker@^26.2.1": - "integrity" "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==" - "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" - "version" "26.6.2" +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" - "merge-stream" "^2.0.0" - "supports-color" "^7.0.0" - -"js-base64@^2.4.3": - "integrity" "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" - "resolved" "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz" - "version" "2.6.4" - -"js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-yaml@^3.13.1": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"jsbn@~0.1.0": - "integrity" "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - "version" "0.1.1" - -"jsesc@^2.5.1": - "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - "version" "2.5.2" - -"jsesc@~0.5.0": - "integrity" "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - "version" "0.5.0" - -"json-parse-even-better-errors@^2.3.0": - "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - "version" "2.3.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema-traverse@^1.0.0": - "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - "version" "1.0.0" - -"json-schema@0.4.0": - "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - "version" "0.4.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"json-stringify-safe@~5.0.1": - "integrity" "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - "version" "5.0.1" - -"json5@^1.0.2": - "integrity" "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==" - "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "minimist" "^1.2.0" - -"json5@^2.1.2": - "integrity" "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" - "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "minimist" "^1.2.5" - -"jsprim@^1.2.2": - "integrity" "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==" - "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" - "version" "1.4.2" - dependencies: - "assert-plus" "1.0.0" - "extsprintf" "1.3.0" - "json-schema" "0.4.0" - "verror" "1.10.0" - -"just-debounce@^1.0.0": - "integrity" "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==" - "resolved" "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz" - "version" "1.1.0" - -"kind-of@^3.0.2", "kind-of@^3.0.3": - "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^3.2.0": - "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^4.0.0": - "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^5.0.0": - "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - "version" "5.1.0" - -"kind-of@^5.0.2": - "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - "version" "5.1.0" - -"kind-of@^6.0.0", "kind-of@^6.0.2", "kind-of@^6.0.3": - "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - "version" "6.0.3" - -"last-run@^1.1.0": - "integrity" "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=" - "resolved" "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "default-resolution" "^2.0.0" - "es6-weak-map" "^2.0.1" - -"lazystream@^1.0.0": - "integrity" "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==" - "resolved" "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "readable-stream" "^2.0.5" - -"lcid@^1.0.0": - "integrity" "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=" - "resolved" "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "invert-kv" "^1.0.0" - -"lead@^1.0.0": - "integrity" "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=" - "resolved" "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "flush-write-stream" "^1.0.2" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"liftoff@^3.1.0": - "integrity" "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==" - "resolved" "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "extend" "^3.0.0" - "findup-sync" "^3.0.0" - "fined" "^1.0.1" - "flagged-respawn" "^1.0.0" - "is-plain-object" "^2.0.4" - "object.map" "^1.0.0" - "rechoir" "^0.6.2" - "resolve" "^1.1.7" - -"lines-and-columns@^1.1.6": - "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" - "version" "1.1.6" - -"load-json-file@^1.0.0": - "integrity" "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "parse-json" "^2.2.0" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - "strip-bom" "^2.0.0" - -"locate-path@^5.0.0": - "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-locate" "^4.1.0" - -"lodash.clonedeep@^4.5.0": - "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - "version" "4.5.0" - -"lodash.debounce@^4.0.8": - "integrity" "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - "version" "4.0.8" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash.truncate@^4.4.2": - "integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" - "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" - "version" "4.4.2" - -"lodash@^4.17.11", "lodash@^4.17.15", "lodash@~4.17.10": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"magic-string@^0.25.7": - "integrity" "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" - "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" - "version" "0.25.7" - dependencies: - "sourcemap-codec" "^1.4.4" - -"make-fetch-happen@^9.1.0": - "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" - "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - "version" "9.1.0" - dependencies: - "agentkeepalive" "^4.1.3" - "cacache" "^15.2.0" - "http-cache-semantics" "^4.1.0" - "http-proxy-agent" "^4.0.1" - "https-proxy-agent" "^5.0.0" - "is-lambda" "^1.0.1" - "lru-cache" "^6.0.0" - "minipass" "^3.1.3" - "minipass-collect" "^1.0.2" - "minipass-fetch" "^1.3.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "negotiator" "^0.6.2" - "promise-retry" "^2.0.1" - "socks-proxy-agent" "^6.0.0" - "ssri" "^8.0.0" - -"make-iterator@^1.0.0": - "integrity" "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==" - "resolved" "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "kind-of" "^6.0.2" - -"map-cache@^0.2.0", "map-cache@^0.2.2": - "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - "version" "0.2.2" - -"map-obj@^1.0.0": - "integrity" "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - "version" "1.0.1" - -"map-obj@^4.0.0": - "integrity" "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==" - "resolved" "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz" - "version" "4.2.1" - -"map-visit@^1.0.0": - "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" - "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "object-visit" "^1.0.0" - -"matchdep@^2.0.0": - "integrity" "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=" - "resolved" "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "findup-sync" "^2.0.0" - "micromatch" "^3.0.4" - "resolve" "^1.4.0" - "stack-trace" "0.0.10" - -"meow@^9.0.0": - "integrity" "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==" - "resolved" "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz" - "version" "9.0.0" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +js-base64@^2.4.3: + version "2.6.4" + resolved "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.0, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^4.1.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^2.0.3, lilconfig@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.11, lodash@^4.17.15, lodash@~4.17.10: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.0: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz" + integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== + +maxmin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" + integrity sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw== + dependencies: + chalk "^1.0.0" + figures "^1.0.1" + gzip-size "^3.0.0" + pretty-bytes "^3.0.0" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== dependencies: "@types/minimist" "^1.2.0" - "camelcase-keys" "^6.2.2" - "decamelize" "^1.2.0" - "decamelize-keys" "^1.1.0" - "hard-rejection" "^2.1.0" - "minimist-options" "4.1.0" - "normalize-package-data" "^3.0.0" - "read-pkg-up" "^7.0.1" - "redent" "^3.0.0" - "trim-newlines" "^3.0.0" - "type-fest" "^0.18.0" - "yargs-parser" "^20.2.3" - -"merge-stream@^2.0.0": - "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - "version" "2.0.0" - -"micromatch@^3.0.4", "micromatch@^3.1.10", "micromatch@^3.1.4": - "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - "version" "3.1.10" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "braces" "^2.3.1" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "extglob" "^2.0.4" - "fragment-cache" "^0.2.1" - "kind-of" "^6.0.2" - "nanomatch" "^1.2.9" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.2" - -"mime-db@1.51.0": - "integrity" "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz" - "version" "1.51.0" - -"mime-types@^2.1.12", "mime-types@~2.1.19": - "integrity" "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz" - "version" "2.1.34" - dependencies: - "mime-db" "1.51.0" - -"min-indent@^1.0.0": - "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" - "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - "version" "1.0.1" - -"minimatch@^3.0.4", "minimatch@~3.0.2": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@^3.1.2": - "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "brace-expansion" "^1.1.7" - -"minimist-options@4.1.0": - "integrity" "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==" - "resolved" "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "arrify" "^1.0.1" - "is-plain-obj" "^1.1.0" - "kind-of" "^6.0.3" - -"minimist@^1.2.0", "minimist@^1.2.5", "minimist@^1.2.6": - "integrity" "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - "version" "1.2.8" - -"minipass-collect@^1.0.2": - "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" - "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "minipass" "^3.0.0" - -"minipass-fetch@^1.3.2": - "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" - "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "minipass" "^3.1.0" - "minipass-sized" "^1.0.3" - "minizlib" "^2.0.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +microbundle@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/microbundle/-/microbundle-0.15.1.tgz#3fa67128934b31736823b5c868dae4b92d94e766" + integrity sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q== + dependencies: + "@babel/core" "^7.12.10" + "@babel/plugin-proposal-class-properties" "7.12.1" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + "@babel/plugin-transform-flow-strip-types" "^7.12.10" + "@babel/plugin-transform-react-jsx" "^7.12.11" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/preset-env" "^7.12.11" + "@babel/preset-flow" "^7.12.1" + "@babel/preset-react" "^7.12.10" + "@rollup/plugin-alias" "^3.1.1" + "@rollup/plugin-babel" "^5.2.2" + "@rollup/plugin-commonjs" "^17.0.0" + "@rollup/plugin-json" "^4.1.0" + "@rollup/plugin-node-resolve" "^11.0.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.2" + asyncro "^3.0.0" + autoprefixer "^10.1.0" + babel-plugin-macros "^3.0.1" + babel-plugin-transform-async-to-promises "^0.8.18" + babel-plugin-transform-replace-expressions "^0.2.0" + brotli-size "^4.0.0" + builtin-modules "^3.1.0" + camelcase "^6.2.0" + escape-string-regexp "^4.0.0" + filesize "^6.1.0" + gzip-size "^6.0.0" + kleur "^4.1.3" + lodash.merge "^4.6.2" + postcss "^8.2.1" + pretty-bytes "^5.4.1" + rollup "^2.35.1" + rollup-plugin-bundle-size "^1.0.3" + rollup-plugin-postcss "^4.0.0" + rollup-plugin-terser "^7.0.2" + rollup-plugin-typescript2 "^0.32.0" + rollup-plugin-visualizer "^5.6.0" + sade "^1.7.4" + terser "^5.7.0" + tiny-glob "^0.2.8" + tslib "^2.0.3" + typescript "^4.1.3" + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.34" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" optionalDependencies: - "encoding" "^0.1.12" - -"minipass-flush@^1.0.5": - "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" - "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "minipass" "^3.0.0" - -"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": - "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" - "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - "version" "1.2.4" - dependencies: - "minipass" "^3.0.0" - -"minipass-sized@^1.0.3": - "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" - "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "minipass" "^3.0.0" - -"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": - "integrity" "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz" - "version" "3.1.6" - dependencies: - "yallist" "^4.0.0" - -"minizlib@^2.0.0", "minizlib@^2.1.1": - "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "minipass" "^3.0.0" - "yallist" "^4.0.0" - -"mixin-deep@^1.2.0": - "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" - "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "for-in" "^1.0.2" - "is-extendable" "^1.0.1" - -"mkdirp@^1.0.3", "mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"ms@^2.0.0", "ms@^2.1.1", "ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"ms@2.0.0": - "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - "version" "2.0.0" - -"mute-stdout@^1.0.0": - "integrity" "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" - "resolved" "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz" - "version" "1.0.1" - -"nan@^2.13.2": - "integrity" "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" - "resolved" "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz" - "version" "2.14.2" - -"nanoid@^3.3.1": - "integrity" "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" - "version" "3.3.1" - -"nanomatch@^1.2.9": - "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" - "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - "version" "1.2.13" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "fragment-cache" "^0.2.1" - "is-windows" "^1.0.2" - "kind-of" "^6.0.2" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"negotiator@^0.6.2": - "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - "version" "0.6.3" - -"next-tick@^1.1.0": - "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" - "version" "1.1.0" - -"node-gyp@^8.4.1": - "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" - "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - "version" "8.4.1" - dependencies: - "env-paths" "^2.2.0" - "glob" "^7.1.4" - "graceful-fs" "^4.2.6" - "make-fetch-happen" "^9.1.0" - "nopt" "^5.0.0" - "npmlog" "^6.0.0" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.2" - "which" "^2.0.2" - -"node-releases@^2.0.2": - "integrity" "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz" - "version" "2.0.2" - -"node-sass@^7.0.1": - "integrity" "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==" - "resolved" "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "async-foreach" "^0.1.3" - "chalk" "^4.1.2" - "cross-spawn" "^7.0.3" - "gaze" "^1.0.0" - "get-stdin" "^4.0.1" - "glob" "^7.0.3" - "lodash" "^4.17.15" - "meow" "^9.0.0" - "nan" "^2.13.2" - "node-gyp" "^8.4.1" - "npmlog" "^5.0.0" - "request" "^2.88.0" - "sass-graph" "4.0.0" - "stdout-stream" "^1.4.0" + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.1.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.13.2: + version "2.14.2" + resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-gyp@^8.4.1: + version "8.4.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-releases@^2.0.12: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + +node-sass@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz" + integrity sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ== + dependencies: + async-foreach "^0.1.3" + chalk "^4.1.2" + cross-spawn "^7.0.3" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + lodash "^4.17.15" + meow "^9.0.0" + nan "^2.13.2" + node-gyp "^8.4.1" + npmlog "^5.0.0" + request "^2.88.0" + sass-graph "4.0.0" + stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -"nopt@^5.0.0": - "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "abbrev" "1" - -"normalize-package-data@^2.3.2": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-package-data@^2.5.0": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-package-data@^3.0.0": - "integrity" "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "hosted-git-info" "^4.0.1" - "resolve" "^1.20.0" - "semver" "^7.3.4" - "validate-npm-package-license" "^3.0.1" - -"normalize-path@^2.1.1": - "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "remove-trailing-separator" "^1.0.1" - -"normalize-path@^3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"normalize-range@^0.1.2": - "integrity" "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - "version" "0.1.2" - -"now-and-later@^2.0.0": - "integrity" "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==" - "resolved" "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "once" "^1.3.2" - -"npmlog@^5.0.0": - "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "are-we-there-yet" "^2.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^3.0.0" - "set-blocking" "^2.0.0" - -"npmlog@^6.0.0": - "integrity" "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "are-we-there-yet" "^3.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^4.0.0" - "set-blocking" "^2.0.0" - -"number-is-nan@^1.0.0": - "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - "version" "1.0.1" - -"oauth-sign@~0.9.0": - "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" - "version" "0.9.0" - -"object-assign@^4.1.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-copy@^0.1.0": - "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" - "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "copy-descriptor" "^0.1.0" - "define-property" "^0.2.5" - "kind-of" "^3.0.3" - -"object-inspect@^1.12.3", "object-inspect@^1.9.0": - "integrity" "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - "version" "1.12.3" - -"object-keys@^1.1.1": - "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - "version" "1.1.1" - -"object-visit@^1.0.0": - "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" - "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "isobject" "^3.0.0" - -"object.assign@^4.0.4", "object.assign@^4.1.0", "object.assign@^4.1.4": - "integrity" "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" - "version" "4.1.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "has-symbols" "^1.0.3" - "object-keys" "^1.1.1" - -"object.defaults@^1.0.0", "object.defaults@^1.1.0": - "integrity" "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=" - "resolved" "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "array-each" "^1.0.1" - "array-slice" "^1.0.0" - "for-own" "^1.0.0" - "isobject" "^3.0.0" - -"object.map@^1.0.0": - "integrity" "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=" - "resolved" "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "for-own" "^1.0.0" - "make-iterator" "^1.0.0" - -"object.pick@^1.2.0", "object.pick@^1.3.0": - "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" - "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "isobject" "^3.0.1" - -"object.reduce@^1.0.0": - "integrity" "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=" - "resolved" "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "for-own" "^1.0.0" - "make-iterator" "^1.0.0" - -"object.values@^1.1.6": - "integrity" "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==" - "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" - "version" "1.1.6" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - -"once@^1.3.0", "once@^1.3.1", "once@^1.3.2", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"ordered-read-streams@^1.0.0": - "integrity" "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=" - "resolved" "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "readable-stream" "^2.0.1" +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz" + integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== + dependencies: + hosted-git-info "^4.0.1" + resolve "^1.20.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npmlog@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz" + integrity sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.0" + set-blocking "^2.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" -"os-locale@^1.4.0": - "integrity" "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=" - "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" - "version" "1.4.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: - "lcid" "^1.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" -"p-limit@^2.2.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: - "p-try" "^2.0.0" + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.2.2: + version "2.3.0" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-cli@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-10.1.0.tgz#f6658c4998a1c35bd66cd71009132b2d12e04f80" + integrity sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA== + dependencies: + chokidar "^3.3.0" + dependency-graph "^0.11.0" + fs-extra "^11.0.0" + get-stdin "^9.0.0" + globby "^13.0.0" + picocolors "^1.0.0" + postcss-load-config "^4.0.0" + postcss-reporter "^7.0.0" + pretty-hrtime "^1.0.3" + read-cache "^1.0.0" + slash "^5.0.0" + yargs "^17.0.0" + +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-load-config@^3.0.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-load-config@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" -"p-locate@^4.1.0": - "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - "version" "4.1.0" +postcss-modules@^4.0.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.3.1.tgz#517c06c09eab07d133ae0effca2c510abba18048" + integrity sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q== dependencies: - "p-limit" "^2.2.0" + generic-names "^4.0.0" + icss-replace-symbols "^1.1.0" + lodash.camelcase "^4.3.0" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + string-hash "^1.1.1" -"p-map@^4.0.0": - "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "aggregate-error" "^3.0.0" +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== -"p-try@^2.0.0": - "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - "version" "2.2.0" +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== dependencies: - "callsites" "^3.0.0" + postcss-value-parser "^4.2.0" -"parse-filepath@^1.0.1": - "integrity" "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=" - "resolved" "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" - "version" "1.0.2" +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== dependencies: - "is-absolute" "^1.0.0" - "map-cache" "^0.2.0" - "path-root" "^0.1.1" + postcss-value-parser "^4.2.0" -"parse-json@^2.2.0": - "integrity" "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" - "version" "2.2.0" +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== dependencies: - "error-ex" "^1.2.0" + postcss-value-parser "^4.2.0" -"parse-json@^5.0.0": - "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - "version" "5.2.0" +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== dependencies: - "@babel/code-frame" "^7.0.0" - "error-ex" "^1.3.1" - "json-parse-even-better-errors" "^2.3.0" - "lines-and-columns" "^1.1.6" - -"parse-node-version@^1.0.0": - "integrity" "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" - "resolved" "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" - "version" "1.0.1" - -"parse-passwd@^1.0.0": - "integrity" "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - "resolved" "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" - "version" "1.0.0" - -"pascalcase@^0.1.1": - "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - "version" "0.1.1" - -"path-dirname@^1.0.0": - "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" - "version" "1.0.2" - -"path-exists@^2.0.0": - "integrity" "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "pinkie-promise" "^2.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-parse@^1.0.7": - "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - "version" "1.0.7" - -"path-root-regex@^0.1.0": - "integrity" "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" - "resolved" "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" - "version" "0.1.2" - -"path-root@^0.1.1": - "integrity" "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=" - "resolved" "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "path-root-regex" "^0.1.0" - -"path-type@^1.0.0": - "integrity" "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"performance-now@^2.1.0": - "integrity" "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - "resolved" "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - "version" "2.1.0" - -"picocolors@^1.0.0": - "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - "version" "1.0.0" - -"picomatch@^2.2.2": - "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - "version" "2.3.0" - -"pify@^2.0.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pinkie-promise@^2.0.0": - "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" - "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "pinkie" "^2.0.0" - -"pinkie@^2.0.0": - "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - "version" "2.0.4" - -"plugin-error@^1.0.1": - "integrity" "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==" - "resolved" "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "ansi-colors" "^1.0.1" - "arr-diff" "^4.0.0" - "arr-union" "^3.1.0" - "extend-shallow" "^3.0.2" - -"posix-character-classes@^0.1.0": - "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - "version" "0.1.1" - -"postcss-value-parser@^4.2.0": - "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - "version" "4.2.0" - -"postcss@^8.1.0", "postcss@^8.3.0": - "integrity" "sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.8.tgz" - "version" "8.4.8" - dependencies: - "nanoid" "^3.3.1" - "picocolors" "^1.0.0" - "source-map-js" "^1.0.2" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"pretty-hrtime@^1.0.0": - "integrity" "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" - "resolved" "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" - "version" "1.0.3" - -"process-nextick-args@^2.0.0", "process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"progress@^2.0.0": - "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - "version" "2.0.3" - -"promise-inflight@^1.0.1": - "integrity" "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - "version" "1.0.1" - -"promise-retry@^2.0.1": - "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" - "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "err-code" "^2.0.2" - "retry" "^0.12.0" - -"psl@^1.1.28": - "integrity" "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - "resolved" "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" - "version" "1.8.0" - -"pump@^2.0.0": - "integrity" "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==" - "resolved" "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"pumpify@^1.3.5": - "integrity" "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==" - "resolved" "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "duplexify" "^3.6.0" - "inherits" "^2.0.3" - "pump" "^2.0.0" - -"punycode@^2.1.0", "punycode@^2.1.1": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"qs@~6.5.2": - "integrity" "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" - "version" "6.5.3" - -"quick-lru@^4.0.1": - "integrity" "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" - "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" - "version" "4.0.1" - -"randombytes@^2.1.0": - "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" - "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "safe-buffer" "^5.1.0" - -"read-pkg-up@^1.0.1": - "integrity" "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "find-up" "^1.0.0" - "read-pkg" "^1.0.0" - -"read-pkg-up@^7.0.1": - "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "find-up" "^4.1.0" - "read-pkg" "^5.2.0" - "type-fest" "^0.8.1" - -"read-pkg@^1.0.0": - "integrity" "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "load-json-file" "^1.0.0" - "normalize-package-data" "^2.3.2" - "path-type" "^1.0.0" - -"read-pkg@^5.2.0": - "integrity" "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - "version" "5.2.0" + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== dependencies: - "@types/normalize-package-data" "^2.4.0" - "normalize-package-data" "^2.5.0" - "parse-json" "^5.0.0" - "type-fest" "^0.6.0" - -"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.0.5", "readable-stream@^2.1.5", "readable-stream@^2.2.2", "readable-stream@^2.3.3", "readable-stream@^2.3.5", "readable-stream@^2.3.6", "readable-stream@~2.3.6", "readable-stream@2 || 3": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^3.6.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readable-stream@3": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readdirp@^2.2.1": - "integrity" "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "graceful-fs" "^4.1.11" - "micromatch" "^3.1.10" - "readable-stream" "^2.0.2" - -"rechoir@^0.6.2": - "integrity" "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=" - "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - "version" "0.6.2" - dependencies: - "resolve" "^1.1.6" - -"redent@^3.0.0": - "integrity" "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==" - "resolved" "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "indent-string" "^4.0.0" - "strip-indent" "^3.0.0" - -"regenerate-unicode-properties@^10.0.1": - "integrity" "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" - "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" - "version" "10.0.1" - dependencies: - "regenerate" "^1.4.2" - -"regenerate@^1.4.2": - "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" - "version" "1.4.2" - -"regenerator-runtime@^0.13.4": - "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" - "version" "0.13.9" - -"regenerator-transform@^0.14.2": - "integrity" "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" - "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz" - "version" "0.14.5" - dependencies: - "@babel/runtime" "^7.8.4" + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" -"regex-not@^1.0.0", "regex-not@^1.0.2": - "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" - "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "extend-shallow" "^3.0.2" - "safe-regex" "^1.1.0" - -"regexp.prototype.flags@^1.4.3": - "integrity" "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==" - "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.2.0" - "functions-have-names" "^1.2.3" - -"regexpp@^3.0.0", "regexpp@^3.1.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"regexpu-core@^5.0.1": - "integrity" "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==" - "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "regenerate" "^1.4.2" - "regenerate-unicode-properties" "^10.0.1" - "regjsgen" "^0.6.0" - "regjsparser" "^0.8.2" - "unicode-match-property-ecmascript" "^2.0.0" - "unicode-match-property-value-ecmascript" "^2.0.0" - -"regjsgen@^0.6.0": - "integrity" "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" - "version" "0.6.0" - -"regjsparser@^0.8.2": - "integrity" "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==" - "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" - "version" "0.8.4" - dependencies: - "jsesc" "~0.5.0" - -"remove-bom-buffer@^3.0.0": - "integrity" "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==" - "resolved" "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "is-buffer" "^1.1.5" - "is-utf8" "^0.2.1" - -"remove-bom-stream@^1.2.0": - "integrity" "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=" - "resolved" "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "remove-bom-buffer" "^3.0.0" - "safe-buffer" "^5.1.0" - "through2" "^2.0.3" - -"remove-trailing-separator@^1.0.1", "remove-trailing-separator@^1.1.0": - "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" - "version" "1.1.0" - -"repeat-element@^1.1.2": - "integrity" "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" - "version" "1.1.4" - -"repeat-string@^1.6.1": - "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - "version" "1.6.1" - -"replace-ext@^1.0.0": - "integrity" "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" - "resolved" "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" - "version" "1.0.1" - -"replace-ext@^2.0.0": - "integrity" "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==" - "resolved" "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz" - "version" "2.0.0" - -"replace-homedir@^1.0.0": - "integrity" "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=" - "resolved" "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "homedir-polyfill" "^1.0.1" - "is-absolute" "^1.0.0" - "remove-trailing-separator" "^1.1.0" - -"request@^2.88.0": - "integrity" "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==" - "resolved" "https://registry.npmjs.org/request/-/request-2.88.2.tgz" - "version" "2.88.2" - dependencies: - "aws-sign2" "~0.7.0" - "aws4" "^1.8.0" - "caseless" "~0.12.0" - "combined-stream" "~1.0.6" - "extend" "~3.0.2" - "forever-agent" "~0.6.1" - "form-data" "~2.3.2" - "har-validator" "~5.1.3" - "http-signature" "~1.2.0" - "is-typedarray" "~1.0.0" - "isstream" "~0.1.2" - "json-stringify-safe" "~5.0.1" - "mime-types" "~2.1.19" - "oauth-sign" "~0.9.0" - "performance-now" "^2.1.0" - "qs" "~6.5.2" - "safe-buffer" "^5.1.2" - "tough-cookie" "~2.5.0" - "tunnel-agent" "^0.6.0" - "uuid" "^3.3.2" - -"require-directory@^2.1.1": - "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - "version" "2.1.1" - -"require-from-string@^2.0.2": - "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - "version" "2.0.2" - -"require-main-filename@^1.0.1": - "integrity" "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" - "version" "1.0.1" - -"resolve-dir@^1.0.0", "resolve-dir@^1.0.1": - "integrity" "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=" - "resolved" "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "expand-tilde" "^2.0.0" - "global-modules" "^1.0.0" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"resolve-options@^1.1.0": - "integrity" "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=" - "resolved" "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "value-or-function" "^3.0.0" - -"resolve-url@^0.2.1": - "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - "version" "0.2.1" - -"resolve@^1.1.6", "resolve@^1.1.7", "resolve@^1.10.0", "resolve@^1.10.1", "resolve@^1.14.2", "resolve@^1.17.0", "resolve@^1.19.0", "resolve@^1.20.0", "resolve@^1.22.1", "resolve@^1.4.0": - "integrity" "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" - "version" "1.22.2" - dependencies: - "is-core-module" "^2.11.0" - "path-parse" "^1.0.7" - "supports-preserve-symlinks-flag" "^1.0.0" - -"ret@~0.1.10": - "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - "version" "0.1.15" - -"retry@^0.12.0": - "integrity" "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" - -"rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"rollup-plugin-terser@^7.0.2": - "integrity" "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==" - "resolved" "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" - "version" "7.0.2" +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== dependencies: - "@babel/code-frame" "^7.10.4" - "jest-worker" "^26.2.1" - "serialize-javascript" "^4.0.0" - "terser" "^5.0.0" - -"rollup@^1.20.0 || ^2.0.0", "rollup@^1.20.0||^2.0.0", "rollup@^2.0.0", "rollup@^2.38.3", "rollup@^2.42.0", "rollup@^2.52.3": - "integrity" "sha512-iEzYw+syFxQ0X9RefVwhr8BA2TNJsTaX8L8dhyeyMECDbmiba+8UQzcu+xZdji0+JQ+s7kouQnw+9Oz5M19XKA==" - "resolved" "https://registry.npmjs.org/rollup/-/rollup-2.70.0.tgz" - "version" "2.70.0" - optionalDependencies: - "fsevents" "~2.3.2" + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" -"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.2", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" -"safe-regex-test@^1.0.0": - "integrity" "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==" - "resolved" "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" - "version" "1.0.0" +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.1.3" - "is-regex" "^1.1.4" - -"safe-regex@^1.1.0": - "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" - "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - "version" "1.1.0" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== dependencies: - "ret" "~0.1.10" - -"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" - -"sass-graph@4.0.0": - "integrity" "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==" - "resolved" "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz" - "version" "4.0.0" + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reporter@^7.0.0: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.0.5.tgz#e55bd0fdf8d17e4f25fb55e9143fcd79349a2ceb" + integrity sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA== + dependencies: + picocolors "^1.0.0" + thenby "^1.3.4" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.2.1, postcss@^8.4.21: + version "8.4.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.26.tgz#1bc62ab19f8e1e5463d98cf74af39702a00a9e94" + integrity sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +pretty-bytes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + integrity sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow== + dependencies: + number-is-nan "^1.0.0" + +pretty-bytes@^5.4.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promise.series@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" + integrity sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ== + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: - "glob" "^7.0.0" - "lodash" "^4.17.11" - "scss-tokenizer" "^0.3.0" - "yargs" "^17.2.1" - -"scss-tokenizer@^0.3.0": - "integrity" "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==" - "resolved" "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz" - "version" "0.3.0" + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@^2.0.1: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: - "js-base64" "^2.4.3" - "source-map" "^0.7.1" + "@babel/runtime" "^7.8.4" -"semver-greatest-satisfied-range@^1.1.0": - "integrity" "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=" - "resolved" "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz" - "version" "1.1.0" +regexp.prototype.flags@^1.4.3: + version "1.5.0" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +request@^2.88.0: + version "2.88.2" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-bundle-size@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz#d245cd988486b4040279f9fd33f357f61673e90f" + integrity sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ== + dependencies: + chalk "^1.1.3" + maxmin "^2.1.0" + +rollup-plugin-postcss@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz#15e9462f39475059b368ce0e49c800fa4b1f7050" + integrity sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w== + dependencies: + chalk "^4.1.0" + concat-with-sourcemaps "^1.1.0" + cssnano "^5.0.1" + import-cwd "^3.0.0" + p-queue "^6.6.2" + pify "^5.0.0" + postcss-load-config "^3.0.0" + postcss-modules "^4.0.0" + promise.series "^0.2.0" + resolve "^1.19.0" + rollup-pluginutils "^2.8.2" + safe-identifier "^0.4.2" + style-inject "^0.3.0" + +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== dependencies: - "sver-compat" "^1.5.0" - -"semver@^6.1.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-plugin-typescript2@^0.32.0: + version "0.32.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.32.1.tgz#470ded8e1965efac02043cc0ef4a7fa36bed83b9" + integrity sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw== + dependencies: + "@rollup/pluginutils" "^4.1.2" + find-cache-dir "^3.3.2" + fs-extra "^10.0.0" + resolve "^1.20.0" + tslib "^2.4.0" + +rollup-plugin-visualizer@^5.6.0: + version "5.9.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz#f1aa2d9b1be8ebd6869223c742324897464d8891" + integrity sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" + +rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^2.35.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" -"semver@^7.2.1": - "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - "version" "7.3.5" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: - "lru-cache" "^6.0.0" + queue-microtask "^1.2.2" -"semver@^7.3.4": - "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - "version" "7.3.5" +sade@^1.7.4: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== dependencies: - "lru-cache" "^6.0.0" + mri "^1.1.0" -"semver@^7.3.5": - "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - "version" "7.3.5" - dependencies: - "lru-cache" "^6.0.0" +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"semver@2 || 3 || 4 || 5": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@7.0.0": - "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" - "version" "7.0.0" - -"serialize-javascript@^4.0.0": - "integrity" "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==" - "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "randombytes" "^2.1.0" - -"set-blocking@^2.0.0": - "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"set-value@^2.0.0", "set-value@^2.0.1": - "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" - "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "extend-shallow" "^2.0.1" - "is-extendable" "^0.1.1" - "is-plain-object" "^2.0.3" - "split-string" "^3.0.1" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"side-channel@^1.0.4": - "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" - "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.0" - "get-intrinsic" "^1.0.2" - "object-inspect" "^1.9.0" - -"signal-exit@^3.0.0", "signal-exit@^3.0.7": - "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - "version" "3.0.7" - -"slash@^3.0.0": - "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - "version" "3.0.0" - -"slice-ansi@^4.0.0": - "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"smart-buffer@^4.2.0": - "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - "version" "4.2.0" - -"snapdragon-node@^2.0.1": - "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" - "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "define-property" "^1.0.0" - "isobject" "^3.0.0" - "snapdragon-util" "^3.0.1" - -"snapdragon-util@^3.0.1": - "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" - "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "kind-of" "^3.2.0" - -"snapdragon@^0.8.1": - "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" - "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - "version" "0.8.2" - dependencies: - "base" "^0.11.1" - "debug" "^2.2.0" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "map-cache" "^0.2.2" - "source-map" "^0.5.6" - "source-map-resolve" "^0.5.0" - "use" "^3.1.0" - -"socks-proxy-agent@^6.0.0": - "integrity" "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz" - "version" "6.1.1" - dependencies: - "agent-base" "^6.0.2" - "debug" "^4.3.1" - "socks" "^2.6.1" - -"socks@^2.6.1": - "integrity" "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==" - "resolved" "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz" - "version" "2.6.2" - dependencies: - "ip" "^1.1.5" - "smart-buffer" "^4.2.0" - -"source-map-js@^1.0.2": - "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" - "version" "1.0.2" - -"source-map-resolve@^0.5.0": - "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" - "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - "version" "0.5.3" - dependencies: - "atob" "^2.1.2" - "decode-uri-component" "^0.2.0" - "resolve-url" "^0.2.1" - "source-map-url" "^0.4.0" - "urix" "^0.1.0" - -"source-map-support@~0.5.19": - "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - "version" "0.5.19" - dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" - -"source-map-url@^0.4.0": - "integrity" "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" - "version" "0.4.1" - -"source-map@^0.5.0", "source-map@^0.5.1", "source-map@^0.5.6": - "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - "version" "0.5.7" - -"source-map@^0.6.0": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@^0.7.1": - "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - "version" "0.7.3" - -"source-map@~0.7.2": - "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - "version" "0.7.3" - -"sourcemap-codec@^1.4.4": - "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - "resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" - "version" "1.4.8" - -"sparkles@^1.0.0": - "integrity" "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" - "resolved" "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz" - "version" "1.0.1" - -"spdx-correct@^3.0.0": - "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" - "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "spdx-expression-parse" "^3.0.0" - "spdx-license-ids" "^3.0.0" - -"spdx-exceptions@^2.1.0": - "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - "version" "2.3.0" - -"spdx-expression-parse@^3.0.0": - "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" - "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "spdx-exceptions" "^2.1.0" - "spdx-license-ids" "^3.0.0" - -"spdx-license-ids@^3.0.0": - "integrity" "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==" - "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz" - "version" "3.0.9" - -"split-string@^3.0.1", "split-string@^3.0.2": - "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" - "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "extend-shallow" "^3.0.0" - -"sprintf-js@~1.0.2": - "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" - -"sshpk@^1.7.0": - "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" - "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "asn1" "~0.2.3" - "assert-plus" "^1.0.0" - "bcrypt-pbkdf" "^1.0.0" - "dashdash" "^1.12.0" - "ecc-jsbn" "~0.1.1" - "getpass" "^0.1.1" - "jsbn" "~0.1.0" - "safer-buffer" "^2.0.2" - "tweetnacl" "~0.14.0" - -"ssri@^8.0.0", "ssri@^8.0.1": - "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" - "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" - "version" "8.0.1" - dependencies: - "minipass" "^3.1.1" - -"stack-trace@0.0.10": - "integrity" "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - "resolved" "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" - "version" "0.0.10" - -"static-extend@^0.1.1": - "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" - "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "define-property" "^0.2.5" - "object-copy" "^0.1.0" - -"stdout-stream@^1.4.0": - "integrity" "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==" - "resolved" "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "readable-stream" "^2.0.1" - -"stream-exhaust@^1.0.1": - "integrity" "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" - "resolved" "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz" - "version" "1.0.2" - -"stream-shift@^1.0.0": - "integrity" "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - "resolved" "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" - "version" "1.0.1" - -"string_decoder@^1.1.1", "string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "safe-buffer" "~5.1.0" - -"string-width@^1.0.1", "string-width@^1.0.2", "string-width@^1.0.2 || 2 || 3 || 4": - "integrity" "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "code-point-at" "^1.0.0" - "is-fullwidth-code-point" "^1.0.0" - "strip-ansi" "^3.0.0" - -"string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": - "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - "version" "4.2.3" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.1" - -"string.prototype.trim@^1.2.7": - "integrity" "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==" - "resolved" "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz" - "version" "1.2.7" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - -"string.prototype.trimend@^1.0.6": - "integrity" "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==" - "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - -"string.prototype.trimstart@^1.0.6": - "integrity" "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==" - "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.4" - "es-abstract" "^1.20.4" - -"strip-ansi@^3.0.0": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "ansi-regex" "^2.0.0" - -"strip-ansi@^3.0.1": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "ansi-regex" "^2.0.0" - -"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": - "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "ansi-regex" "^5.0.1" - -"strip-bom@^2.0.0": - "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "is-utf8" "^0.2.0" - -"strip-bom@^3.0.0": - "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - "version" "3.0.0" - -"strip-indent@^3.0.0": - "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==" - "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "min-indent" "^1.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"supports-color@^5.3.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^7.0.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@^7.1.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"supports-preserve-symlinks-flag@^1.0.0": - "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - "version" "1.0.0" - -"sver-compat@^1.5.0": - "integrity" "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=" - "resolved" "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "es6-iterator" "^2.0.1" - "es6-symbol" "^3.1.1" - -"table@^6.0.9": - "integrity" "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==" - "resolved" "https://registry.npmjs.org/table/-/table-6.8.0.tgz" - "version" "6.8.0" - dependencies: - "ajv" "^8.0.1" - "lodash.truncate" "^4.4.2" - "slice-ansi" "^4.0.0" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - -"tar@^6.0.2", "tar@^6.1.2": - "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" - "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - "version" "6.1.11" - dependencies: - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "minipass" "^3.0.0" - "minizlib" "^2.1.1" - "mkdirp" "^1.0.3" - "yallist" "^4.0.0" - -"terser@^5.0.0": - "integrity" "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==" - "resolved" "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz" - "version" "5.6.1" - dependencies: - "commander" "^2.20.0" - "source-map" "~0.7.2" - "source-map-support" "~0.5.19" - -"text-table@^0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" - -"through2-filter@^3.0.0": - "integrity" "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==" - "resolved" "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "through2" "~2.0.0" - "xtend" "~4.0.0" - -"through2@^2.0.0": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - -"through2@^2.0.3": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - -"through2@^3.0.1": - "integrity" "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "inherits" "^2.0.4" - "readable-stream" "2 || 3" - -"through2@^4.0.2": - "integrity" "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==" - "resolved" "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "readable-stream" "3" - -"through2@~2.0.0": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - -"time-stamp@^1.0.0": - "integrity" "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" - "resolved" "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz" - "version" "1.1.0" - -"tiny-emitter@^2.1.0": - "integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - "resolved" "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" - "version" "2.1.0" - -"to-absolute-glob@^2.0.0": - "integrity" "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=" - "resolved" "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "is-absolute" "^1.0.0" - "is-negated-glob" "^1.0.0" - -"to-fast-properties@^2.0.0": - "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - "version" "2.0.0" - -"to-object-path@^0.3.0": - "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" - "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "kind-of" "^3.0.2" - -"to-regex-range@^2.1.0": - "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" +safe-identifier@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" + integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w== -"to-regex@^3.0.1", "to-regex@^3.0.2": - "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" - "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - "version" "3.0.2" +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "regex-not" "^1.0.2" - "safe-regex" "^1.1.0" + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" -"to-through@^2.0.0": - "integrity" "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=" - "resolved" "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz" - "version" "2.0.0" +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz" + integrity sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ== dependencies: - "through2" "^2.0.3" + glob "^7.0.0" + lodash "^4.17.11" + scss-tokenizer "^0.3.0" + yargs "^17.2.1" -"tough-cookie@~2.5.0": - "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" - "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" - "version" "2.5.0" +scss-tokenizer@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz" + integrity sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ== dependencies: - "psl" "^1.1.28" - "punycode" "^2.1.1" + js-base64 "^2.4.3" + source-map "^0.7.1" -"trim-newlines@^3.0.0": - "integrity" "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" - "resolved" "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" - "version" "3.0.1" +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.0.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.1.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +slash@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.1.1" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz" + integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== + dependencies: + agent-base "^6.0.2" + debug "^4.3.1" + socks "^2.6.1" + +socks@^2.6.1: + version "2.6.2" + resolved "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.2.0" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.1, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.9" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +string-hash@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A== + +"string-width@^1.0.2 || 2 || 3 || 4": + version "1.0.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.6: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.padend@^3.0.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" + integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-inject@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" + integrity sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== + +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +table@^6.0.9: + version "6.8.0" + resolved "https://registry.npmjs.org/table/-/table-6.8.0.tgz" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tar@^6.0.2, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser@^5.0.0: + version "5.6.1" + resolved "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz" + integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +terser@^5.7.0: + version "5.19.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.1.tgz#dbd7231f224a9e2401d0f0959542ed74d76d340b" + integrity sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenby@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" + integrity sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ== + +tiny-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tiny-glob@^0.2.8: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== "true-case-path@^1.0.2": - "integrity" "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==" - "resolved" "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz" - "version" "1.0.3" + version "1.0.3" + resolved "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== dependencies: - "glob" "^7.1.2" + glob "^7.1.2" -"tsconfig-paths@^3.14.1": - "integrity" "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==" - "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" - "version" "3.14.2" +tsconfig-paths@^3.14.1: + version "3.14.2" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" - "json5" "^1.0.2" - "minimist" "^1.2.6" - "strip-bom" "^3.0.0" - -"tunnel-agent@^0.6.0": - "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" - "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - "version" "0.6.0" - dependencies: - "safe-buffer" "^5.0.1" - -"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": - "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - "version" "0.14.5" - -"type-check@^0.4.0", "type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-fest@^0.18.0": - "integrity" "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" - "version" "0.18.1" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"type-fest@^0.6.0": - "integrity" "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - "version" "0.6.0" - -"type-fest@^0.8.1": - "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - "version" "0.8.1" - -"type@^1.0.1": - "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" - "version" "1.2.0" - -"type@^2.5.0": - "integrity" "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - "resolved" "https://registry.npmjs.org/type/-/type-2.6.0.tgz" - "version" "2.6.0" - -"typed-array-length@^1.0.4": - "integrity" "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==" - "resolved" "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.2" - "for-each" "^0.3.3" - "is-typed-array" "^1.1.9" - -"typedarray@^0.0.6": - "integrity" "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - "version" "0.0.6" - -"unbox-primitive@^1.0.2": - "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" - "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "call-bind" "^1.0.2" - "has-bigints" "^1.0.2" - "has-symbols" "^1.0.3" - "which-boxed-primitive" "^1.0.2" - -"unc-path-regex@^0.1.2": - "integrity" "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" - "resolved" "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" - "version" "0.1.2" - -"undertaker-registry@^1.0.0": - "integrity" "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" - "resolved" "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz" - "version" "1.0.1" - -"undertaker@^1.2.1": - "integrity" "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==" - "resolved" "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "arr-flatten" "^1.0.1" - "arr-map" "^2.0.0" - "bach" "^1.0.0" - "collection-map" "^1.0.0" - "es6-weak-map" "^2.0.1" - "fast-levenshtein" "^1.0.0" - "last-run" "^1.1.0" - "object.defaults" "^1.0.0" - "object.reduce" "^1.0.0" - "undertaker-registry" "^1.0.0" - -"unicode-canonical-property-names-ecmascript@^2.0.0": - "integrity" "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" - "version" "2.0.0" - -"unicode-match-property-ecmascript@^2.0.0": - "integrity" "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" - "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "unicode-canonical-property-names-ecmascript" "^2.0.0" - "unicode-property-aliases-ecmascript" "^2.0.0" - -"unicode-match-property-value-ecmascript@^2.0.0": - "integrity" "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" - "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" - "version" "2.0.0" - -"unicode-property-aliases-ecmascript@^2.0.0": - "integrity" "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" - "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" - "version" "2.0.0" - -"union-value@^1.0.0": - "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" - "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "arr-union" "^3.1.0" - "get-value" "^2.0.6" - "is-extendable" "^0.1.1" - "set-value" "^2.0.1" - -"unique-filename@^1.1.1": - "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" - "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "unique-slug" "^2.0.0" - -"unique-slug@^2.0.0": - "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" - "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "imurmurhash" "^0.1.4" - -"unique-stream@^2.0.2": - "integrity" "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==" - "resolved" "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "json-stable-stringify-without-jsonify" "^1.0.1" - "through2-filter" "^3.0.0" - -"unset-value@^1.0.0": - "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" - "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has-value" "^0.3.1" - "isobject" "^3.0.0" - -"upath@^1.1.1": - "integrity" "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - "resolved" "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" - "version" "1.2.0" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"urix@^0.1.0": - "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - "version" "0.1.0" - -"use@^3.1.0": - "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - "version" "3.1.1" - -"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"uuid@^3.3.2": - "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - "version" "3.4.0" - -"v8-compile-cache@^2.0.3": - "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - "version" "2.3.0" - -"v8flags@^3.2.0": - "integrity" "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==" - "resolved" "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "homedir-polyfill" "^1.0.1" - -"validate-npm-package-license@^3.0.1": - "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" - "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "spdx-correct" "^3.0.0" - "spdx-expression-parse" "^3.0.0" - -"value-or-function@^3.0.0": - "integrity" "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" - "resolved" "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz" - "version" "3.0.0" - -"verror@1.10.0": - "integrity" "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=" - "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - "version" "1.10.0" - dependencies: - "assert-plus" "^1.0.0" - "core-util-is" "1.0.2" - "extsprintf" "^1.2.0" - -"vinyl-fs@^3.0.0": - "integrity" "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==" - "resolved" "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "fs-mkdirp-stream" "^1.0.0" - "glob-stream" "^6.1.0" - "graceful-fs" "^4.0.0" - "is-valid-glob" "^1.0.0" - "lazystream" "^1.0.0" - "lead" "^1.0.0" - "object.assign" "^4.0.4" - "pumpify" "^1.3.5" - "readable-stream" "^2.3.3" - "remove-bom-buffer" "^3.0.0" - "remove-bom-stream" "^1.2.0" - "resolve-options" "^1.1.0" - "through2" "^2.0.0" - "to-through" "^2.0.0" - "value-or-function" "^3.0.0" - "vinyl" "^2.0.0" - "vinyl-sourcemap" "^1.1.0" - -"vinyl-sourcemap@^1.1.0": - "integrity" "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=" - "resolved" "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "append-buffer" "^1.0.2" - "convert-source-map" "^1.5.0" - "graceful-fs" "^4.1.6" - "normalize-path" "^2.1.1" - "now-and-later" "^2.0.0" - "remove-bom-buffer" "^3.0.0" - "vinyl" "^2.0.0" - -"vinyl-sourcemaps-apply@^0.2.1": - "integrity" "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=" - "resolved" "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "source-map" "^0.5.1" - -"vinyl@^2.0.0": - "integrity" "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==" - "resolved" "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "clone" "^2.1.1" - "clone-buffer" "^1.0.0" - "clone-stats" "^1.0.0" - "cloneable-readable" "^1.0.0" - "remove-trailing-separator" "^1.0.1" - "replace-ext" "^1.0.0" - -"virtual-scroll@^2.2.1": - "integrity" "sha512-RvjcLxluh7B/6GPzLgQ9d0NYG4yqEguTc3MU7AvxyPVltuo2Cq5RokTL9RKUaZCMJ64in2hus0d03gTtoHp55g==" - "resolved" "https://registry.npmjs.org/virtual-scroll/-/virtual-scroll-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "tiny-emitter" "^2.1.0" - -"whatwg-fetch@^3.6.2": - "integrity" "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz" - "version" "3.6.2" - -"which-boxed-primitive@^1.0.2": - "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" - "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "is-bigint" "^1.0.1" - "is-boolean-object" "^1.1.0" - "is-number-object" "^1.0.4" - "is-string" "^1.0.5" - "is-symbol" "^1.0.3" - -"which-module@^1.0.0": - "integrity" "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz" - "version" "1.0.0" - -"which-typed-array@^1.1.9": - "integrity" "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==" - "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" - "version" "1.1.9" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "for-each" "^0.3.3" - "gopd" "^1.0.1" - "has-tostringtag" "^1.0.0" - "is-typed-array" "^1.1.10" - -"which@^1.2.14": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^2.0.1", "which@^2.0.2": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"wide-align@^1.1.2", "wide-align@^1.1.5": - "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "string-width" "^1.0.2 || 2 || 3 || 4" - -"word-wrap@^1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"wrap-ansi@^2.0.0": - "integrity" "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "string-width" "^1.0.1" - "strip-ansi" "^3.0.1" - -"wrap-ansi@^7.0.0": - "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"xtend@~4.0.0", "xtend@~4.0.1": - "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - "version" "4.0.2" - -"y18n@^3.2.1": - "integrity" "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz" - "version" "3.2.2" - -"y18n@^5.0.5": - "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - "version" "5.0.8" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yargs-parser@^20.2.3": - "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - "version" "20.2.9" - -"yargs-parser@^21.0.0": - "integrity" "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - "version" "21.0.1" - -"yargs-parser@^5.0.1": - "integrity" "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "camelcase" "^3.0.0" - "object.assign" "^4.1.0" - -"yargs@^17.2.1": - "integrity" "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz" - "version" "17.3.1" - dependencies: - "cliui" "^7.0.2" - "escalade" "^3.1.1" - "get-caller-file" "^2.0.5" - "require-directory" "^2.1.1" - "string-width" "^4.2.3" - "y18n" "^5.0.5" - "yargs-parser" "^21.0.0" - -"yargs@^7.1.0": - "integrity" "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz" - "version" "7.1.2" - dependencies: - "camelcase" "^3.0.0" - "cliui" "^3.2.0" - "decamelize" "^1.1.1" - "get-caller-file" "^1.0.1" - "os-locale" "^1.4.0" - "read-pkg-up" "^1.0.1" - "require-directory" "^2.1.1" - "require-main-filename" "^1.0.1" - "set-blocking" "^2.0.0" - "string-width" "^1.0.2" - "which-module" "^1.0.0" - "y18n" "^3.2.1" - "yargs-parser" "^5.0.1" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.0.3, tslib@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^4.1.3: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +virtual-scroll@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/virtual-scroll/-/virtual-scroll-2.2.1.tgz" + integrity sha512-RvjcLxluh7B/6GPzLgQ9d0NYG4yqEguTc3MU7AvxyPVltuo2Cq5RokTL9RKUaZCMJ64in2hus0d03gTtoHp55g== + dependencies: + tiny-emitter "^2.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.1.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.0.0, yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yargs@^17.2.1: + version "17.3.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz" + integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" From a1d4fb96da531549564f942c9d8ef7196938ad23 Mon Sep 17 00:00:00 2001 From: Sajjad Hashemian Date: Fri, 29 Sep 2023 15:38:18 +0330 Subject: [PATCH 02/11] fix load when not defered --- dist/js/luge.cjs | 2 +- dist/js/luge.cjs.map | 2 +- dist/js/luge.modern.js | 2 +- dist/js/luge.modern.js.map | 2 +- dist/js/luge.module.js | 2 +- dist/js/luge.module.js.map | 2 +- dist/luge.umd.js | 2 +- dist/luge.umd.js.map | 2 +- src/js/luge/core/index.js | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dist/js/luge.cjs b/dist/js/luge.cjs index a16c69d..806bd35 100644 --- a/dist/js/luge.cjs +++ b/dist/js/luge.cjs @@ -1,2 +1,2 @@ -var e=require("virtual-scroll"),t=require("bowser/src/bowser.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/i(e),s=/*#__PURE__*/i(t),o=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),r=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),l=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),x=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),k=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),P=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),k.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),k.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:P.add.bind(P),remove:P.remove.bind(P)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:k.add.bind(k),nextTick:k.nextTick.bind(k),remove:k.remove.bind(k),tick:k.tick.bind(k)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle("load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),x=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),k=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),P=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),k.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),k.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:P.add.bind(P),remove:P.remove.bind(P)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:k.add.bind(k),nextTick:k.nextTick.bind(k),remove:k.remove.bind(k),tick:k.tick.bind(k)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"luge.cjs","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js","../../src/js/luge/plugins/Browser.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/luge.modern.js b/dist/js/luge.modern.js index bb8118c..97db26c 100644 --- a/dist/js/luge.modern.js +++ b/dist/js/luge.modern.js @@ -1,2 +1,2 @@ -import e from"virtual-scroll";import t from"bowser/src/bowser.js";class s{static isArray(e){return e&&"object"==typeof e&&Array.isArray(e)}static isObject(e){return e&&"object"==typeof e&&!Array.isArray(e)}static isString(e){return e&&"string"==typeof e}static mergeDeep(e,t){const i=Object.assign({},e);return s.isObject(e)&&s.isObject(t)&&Object.keys(t).forEach(o=>{s.isObject(t[o])?o in e?i[o]=s.isObject(e[o])&&s.isObject(t[o])?s.mergeDeep(e[o],t[o]):t[o]:Object.assign(i,{[o]:t[o]}):Object.assign(i,{[o]:t[o]})}),i}static toCamelCase(e){return s.isString(e)?e.replace(/(?:^\w|[A-Z]|\b\w)/g,(e,t)=>0===t?e.toLowerCase():e.toUpperCase()).replace(/\W+/g,""):e}static toUpperCamelCase(e){return s.isString(e)?(e=s.toCamelCase(e)).charAt(0).toUpperCase()+e.slice(1):e}static isInPage(e){return e!==document.body&&document.body.contains(e)}static deepFreeze(e){return Object.keys(e).forEach(t=>{"object"==typeof e[t]&&s.deepFreeze(e[t])}),Object.freeze(e)}static clamp(e,t,s){return Math.min(s,Math.max(t,e))}}var i=s,o=new class{constructor(){this.events=[]}on(e,t,s,i=!1){(this.events[e]||(this.events[e]=[])).push({cb:t,context:s,once:i})}once(e,t,s){this.on(e,t,s,!0)}emit(e){const t=this,s=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach((i,o)=>{i.cb.apply(i.context,s),i.once&&delete t.events[e][o]})}off(e,t){const s=this;this.events[e]&&this.events[e].forEach((i,o)=>{i.cb===t&&delete s.events[e][o]})}},l=new class{constructor(){this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(e=>{this.events[e]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}cycle(e){if(this.cycles[e]){this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e);for(const e in this.events)this.events[e].done=0;this.proceed(e)}}proceed(e){const t=this.cycles[e].events,s=this.cycles[e].current;if(s{this.do(e,t)}):this.do(e,i)}else this.debug&&console.log(e+" cycle ended")}next(e){const t=this,s=this.cycles[e].events,i=this.cycles[e].current;if(i1&&n.forEach(e=>{(0===t.events[e].done||t.events[e].done{o.callback===t&&o.cycle===s&&delete i.events[e].callbacks[l]})}do(e,t){this.events[t].done=0,this.events[t].callbacks.length>0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),o.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort((e,t)=>e.position-t.position).forEach(s=>{null===s.cycle||s.cycle===e?s.callback(()=>this.done(e,t)):this.done(e,t)})):this.done(e,t)}done(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),o.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)}enableDebug(e=!0){this.debug=e}},n=new class{constructor(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}setSettings(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))}siteInit(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()}bindEvents(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})}mouseHandler(e){const t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,o.emit("mouseMove",e)}resizeThrottle(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)}resizeHandler(){this.setCSSProperties(),o.emit("resize")}setCSSProperties(){const e=window.innerWidth;this.windowWidth!==e&&(this.windowWidth=e,this.clientWidth=document.body.clientWidth);const t=window.innerHeight;this.windowHeight!==t&&(this.windowHeight=t,this.clientHeight=document.body.clientHeight),requestAnimationFrame(()=>{document.documentElement.style.setProperty("--vw",.01*this.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*this.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*this.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*this.clientHeight+"px")})}scrollHandler(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,o.emit("scroll")}scrollStart(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),o.emit("scrollStart")}scrollEnd(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),o.emit("scrollEnd")}showCredits(){if(this.settings.credits.show){const e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,e+"font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}}};class r{constructor(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}beforeInit(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()}init(){this.setAttributes()}disabled(){return!!(n.settings[this.pluginSlug]||{}).disabled}setAttributes(){this.pluginAttributes={}}getAttributes(e){const t=this.pluginAttributes,s={};for(const o in t){const l=t[o];let n="lg-"+this.pluginSlug;"root"!==o&&(n+="-"+o),n=i.toCamelCase(n);const r=e.dataset[n];let a,d,c;"object"==typeof l?(a=l[0],c=l[1]):a=l,d=void 0===r&&void 0!==c?a(c):(void 0!==r||a!==Boolean)&&(void 0!==r?a===Boolean?"false"!==r:a(r):void 0),s[o]=d}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=s),s}}class a extends r{constructor(e){super("preloader"),this.luge=e,this.intro=!1,this.playerIn=!1,this.startTime=Date.now(),this.doneLoad=null,e.preloader={add:this.add.bind(this)}}init(){super.init(),this.el=document.querySelector("[data-lg-preloader]"),this.el&&(this.attributes=this.getAttributes(this.el),this.el.classList.add("lg-preloader","lg-preloader--"+this.attributes.root),this.initLottie(),this.luge.lifecycle.add("siteIn",this.siteIn.bind(this))),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this))}setAttributes(){this.pluginAttributes={root:[String,""],duration:[Number,this.luge._settings.preloader.duration],in:String,reverse:Boolean}}pageLoad(e){this.attributes&&"lottie"===this.attributes.root&&"object"==typeof lottie?this.doneLoad=e:e()}siteIn(e){const t=(Date.now()-this.startTime)/1e3,s=this.attributes.duration-t;if(s<=0){const t=this.clear.bind(this,e);if(this.playerIn)this.playerIn.play(),this.playerIn.addEventListener("complete",t,{once:!0});else if("function"==typeof this.intro)this.intro(e,this.remove.bind(this));else{const e=window.getComputedStyle(this.el).getPropertyValue("transition-duration");""!==e&&"0s"!==e?(this.el.addEventListener("transitionend",t,{once:!0}),this.el.classList.add("is-hidden")):t()}}else setTimeout(this.siteIn.bind(this,e),1e3*s)}clear(e){this.playerIn&&this.playerIn.destroy(),this.remove(),e()}remove(e){this.el.parentNode.removeChild(this.el),this.el=null}add(e){this.intro=e}initLottie(){const e=this;if("lottie"===this.attributes.root&&"object"==typeof lottie){const t=this.attributes.in;let s=!1;t&&(s=lottie.loadAnimation({container:this.el,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}}),this.attributes.reverse&&s.setDirection(-1)),s.addEventListener("DOMLoaded",()=>{e.attributes.reverse&&s.goToAndStop(s.totalFrames-1,!0),e.el.setAttribute("style",""),"function"==typeof e.doneLoad&&(e.doneLoad(),e.doneLoad=null)},{once:!0}),this.playerIn=s}}}class d extends r{constructor(e){super("reveal"),this.luge=e,this.elements=[],this.toRevealIn=[],this.toRevealOut=[],this.reveals={in:{},out:{}},this.canReveal=!1,this.onScrollProgress=this.onScrollProgress.bind(this),e.reveal={add:this.add.bind(this)}}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),11),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this)),this.bindEvents()}setAttributes(){super.setAttributes(),this.pluginAttributes={root:String,stagger:String,manual:[Boolean,!1],multiple:Boolean,delay:[Number,0]}}getAttributes(e){const t=super.getAttributes(e);return void 0!==t.stagger&&""===t.stagger?t.stagger=this.luge._settings.reveal.stagger:void 0===t.stagger&&(t.stagger=!1),t}bindEvents(){this.luge.emitter.on("resize",this.resizeHandler,this),this.luge.emitter.on("scroll",this.scrollHandler,this),this.luge.emitter.on("update",this.updateHandler,this)}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-reveal]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);if(!t.stagger&&null!==e.closest("[data-lg-reveal-stagger]"))return;const s=t.root;e.luge.reveal.name=i.toCamelCase(s),t.manual?(e.luge.reveal.in=()=>{this.revealCallback(e,e.luge.reveal.name,"in"),this.setRevealClasses(e,"is-in")},e.luge.reveal.out=()=>{this.revealCallback(e,e.luge.reveal.name,"out"),this.setRevealClasses(e,"is-out")}):(this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress)),e.luge.reveal.delay=1e3*t.delay,t.stagger?Array.from(e.children).forEach(e=>{const t=e.dataset.lgReveal;e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),(t||s)&&e.classList.add("lg-reveal--"+(null!=t?t:s)),e.dataset.lgRevealChild="",(e.luge||(e.luge={}))&&(e.luge.reveal={isRevealed:!1})}):(e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),s&&e.classList.add("lg-reveal--"+s)),this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.canReveal=!1,this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){const t=e.target,s=this.luge._settings.reveal.threshold;t.scrollProgress>=s&&t.scrollProgress<=1-s&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-s&&t.scrollEnd{e.scrollStart<0&&(this.toRevealIn.includes(e)||this.toRevealIn.push(e))}),this.revealElements(),e()}resizeHandler(){this.revealElements()}scrollHandler(){this.revealElements()}updateHandler(){this.addElements(),this.revealElements()}revealElements(){const e=this;if(this.canReveal){let t=0;this.toRevealIn.forEach(s=>{const o=i.toCamelCase(s.luge.reveal.root);t+=s.luge.reveal.delay,setTimeout(function(){e.revealCallback(s,o,"in"),s.luge.reveal.stagger?Array.from(s.children).forEach((t,l)=>{const n=i.toCamelCase(t.dataset.lgReveal);setTimeout(()=>{(n||o)&&e.revealCallback(t,null!=n?n:o,"in"),e.setRevealClasses(t,"is-in")},l*s.luge.reveal.stagger*1e3)}):e.setRevealClasses(s,"is-in")},t),t+=1e3*this.luge._settings.reveal.stagger,s.luge.reveal.multiple||e.removeElement(s)}),this.toRevealOut.forEach(t=>{const s=i.toCamelCase(t.luge.reveal.root);void 0!==t.luge.reveal.isRevealed&&e.revealCallback(t,s,"out");let o="";o=t.scrollProgress>.5?"is-out is-out-top":"is-out is-out-bottom",t.luge.reveal.stagger?Array.from(t.children).forEach((l,n)=>{const r=i.toCamelCase(l.dataset.lgReveal);setTimeout(()=>{(r||s)&&e.revealCallback(l,null!=r?r:s,"out"),e.setRevealClasses(l,o)},n*t.luge.reveal.stagger*1e3)}):e.setRevealClasses(t,o)}),this.toRevealIn=[],this.toRevealOut=[]}}setRevealClasses(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(t=>{e.classList.add(t)})}revealCallback(e,t,s){e.dispatchEvent(new CustomEvent("reveal"+s)),e.luge.reveal.isRevealed="in"===s,"function"==typeof this.reveals[s][t]?this.reveals[s][t](e):"function"==typeof e["onreveal"+s]&&e["onreveal"+s]()}add(e,t,s){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=s)}}class c extends r{constructor(e){super("transition"),this.luge=e,this.url=window.location.href,this.pathname=window.location.pathname,this.pageFetched=null,this.currentPage=null,this.reload=this.luge._settings.transition.reload,this.prevScrollTop=0,this.newScrollTop=0,this.transitions={in:{},out:{}},this.listeners={linkHandler:this.linkHandler.bind(this)},e.transition={add:this.add.bind(this)}}init(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")}bindLinksEvent(){document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(e=>{e.addEventListener("click",this.listeners.linkHandler)})}unbindLinksEvent(){document.querySelectorAll("a").forEach(e=>{e.removeEventListener("click",this.listeners.linkHandler)})}linkHandler(e){const t=e.currentTarget,s=t.getAttribute("href");if(s&&0!==s.indexOf("#")&&0!==s.indexOf("tel")&&0!==s.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===s.indexOf(window.location.origin)||0===s.indexOf("/")||-1===s.indexOf("/"))){if(e.preventDefault(),window.location.href===s)return;this.navigateTo(s),history.pushState(null,null,this.url)}}navigateTo(e){if(this.url=e,this.reload){const t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",t=>{window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")}pageInit(e){this.bindLinksEvent(),e()}initLoader(){const e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(()=>{e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){const t=e.getAttribute("data-lg-loader-out");let s=!1,i=e.getAttribute("data-lg-loader-in"),o=!1;t&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===i&&(i=t),i&&(o=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:i,rendererSettings:{preserveAspectRatio:"none"}}),i===t&&o.setDirection(-1)),e.playerOut=s,e.playerIn=o}}pageFetch(e){const t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(s){t.pageFetched=s,e()})}pageCreate(e){const t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),s=t.querySelector("[data-lg-page]");if(s){{this.currentPage.insertAdjacentElement("beforebegin",s),s.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{document.querySelector("head title").insertAdjacentElement("afterend",e)});const e=document.querySelector("head title"),i=t.querySelector("head title");e&&i&&(e.innerText=i.innerText)}window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url}pageKill(e){const t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()}pageOut(e){const t=this,s=document.querySelector("[data-lg-page]");if(s){const o=i.toCamelCase(s.getAttribute("data-lg-page"));let l=!1;if("function"==typeof this.transitions.out[o]?l=this.transitions.out[o]:"function"==typeof s.onpageout?l=s.onpageout:"function"==typeof this.transitions.out.default&&(l=this.transitions.out.default),l)l(s,e);else{const s=document.querySelector("[data-lg-loader]");if(s){if(s.playerOut)s.playerOut.stop(),s.playerOut.renderer.svgElement.style.opacity=1,s.playerOut.play(),s.playerOut.addEventListener("complete",()=>{t.reload||(s.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{const t=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==t&&"0s"!==t?s.addEventListener("transitionend",e,{once:!0}):e()}s.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)}pageIn(e){const t=document.querySelector("[data-lg-page]");if(t){const s=i.toCamelCase(t.getAttribute("data-lg-page"));let o=!1;if(t.style.opacity="","function"==typeof this.transitions.in[s]?o=this.transitions.in[s]:"function"==typeof t.onpagein?o=t.onpagein:"function"==typeof this.transitions.in.default&&(o=this.transitions.in.default),o)o(t,e);else{const t=document.querySelector("[data-lg-loader]");if(t&&t.classList.contains("is-visible"))if(t.playerIn)t.playerIn.stop(),t.playerIn.renderer.svgElement.style.opacity=1,"reverse"===t.getAttribute("data-lg-loader-in")?t.playerIn.goToAndPlay(t.playerIn.totalFrames,!0):t.playerIn.play(),t.playerIn.addEventListener("complete",()=>{t.playerIn.renderer.svgElement.style.opacity="",t.classList.remove("is-visible"),e()},{once:!0});else{const s=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==s&&"0s"!==s?t.addEventListener("transitionend",e,{once:!0}):e(),t.classList.remove("is-visible")}else e()}}else e()}historyStateChanged(){let e="";e=0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url),e.pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(()=>{this.newScrollTop=window.scrollY,window.scroll({top:this.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))}add(e,t="default",s){this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=s)}}class h extends r{constructor(e){super("scroll"),this.luge=e,this.elements=[],this.allowedProperties=["opacity","background-x","background-y"],this.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],this.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);const s={};s.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,s.yoyo=t.yoyo,s.inertia=t.inertia;let i=!1;if(void 0!==t.animate?i=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(i=this.presets[t.root]),i){const e={};for(const t in i)if(this.allowedProperties.includes(t)||this.transformProperties.includes(t)){const s=i[t];let o=String(s[0]),l=String(s[1]),n=o.match(/\d+([a-zA-Z%]+)/m);n?n=n[1]:0===t.indexOf("rotate")&&(n="deg"),o=Number(o.replace(n,"")),l=Number(l.replace(n,""));let r=t;"background-x"===t?r="background-position-x":"background-y"===t&&(r="background-position-y"),e[r]={from:o,to:l,current:o,unit:n}}s.properties=e}e.luge.scroll.animation=s,this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){e.target.luge.scroll.animation.atDest=!1}tick(){for(const e of this.elements){if(e.luge.scroll.animation.atDest)continue;let t=e.scrollProgress;if(e.luge.scroll.yoyo&&(t=1-Math.abs(1-2*t)),e.luge.scroll.animation.smoothProgress+=(t-e.luge.scroll.animation.smoothProgress)*(1-e.luge.scroll.inertia),e.luge.scroll.animation.properties){const t={};for(const[s,i]of Object.entries(e.luge.scroll.animation.properties))i.current=i.from+(i.to-i.from)*e.luge.scroll.animation.smoothProgress,["x","y","z"].includes(s)?(t.translate3d||(t.translate3d={}))&&(t.translate3d[s]=i.current+i.unit):t[s]=i.current+i.unit;const s=[];for(const[e,i]of Object.entries(t))if(this.transformProperties.includes(e)){if("object"==typeof i)if("translate3d"===e){const e=Object.assign({x:0,y:0,z:0},i);i.string=e.x+", "+e.y+", "+e.z}else i.string=Object.values(i).join(", ");s.push(e+"("+("object"!=typeof i?i:i.string)+")")}const i={},o=[];s.length>0&&(i.transform=s.join(" "),o.push("transform"));for(const[e,s]of Object.entries(t))this.transformProperties.includes(e)||(i[e]=s,o.push(e));for(const[t,s]of Object.entries(i))e.style.setProperty(t,s);e.style.setProperty("will-change",o.join(", "))}else{const t=Math.round(1e3*(e.scrollProgress-e.luge.scroll.animation.smoothProgress))/1e3;e.style.setProperty("--progress",e.luge.scroll.animation.smoothProgress),e.style.setProperty("--abs-diff",Math.abs(t)),e.style.setProperty("--diff",t)}Math.abs(t-e.luge.scroll.animation.smoothProgress)<1e-4&&(e.luge.scroll.animation.atDest=!0)}}}class u extends r{constructor(){super("smooth"),window.hasSmoothScroll=!1,window.isSmoothScrolling=!1}init(){if(super.init(),this.element=document.documentElement,this.hasSmooth=this.element.hasAttribute("data-lg-smooth"),this.hasSmooth){var t,s;window.hasSmoothScroll=!0,this.smoothScroll=window.scrollTop,this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,document.documentElement.classList.add("has-smooth-scroll");const i=(null==(t=navigator)||null==(t=t.userAgentData)?void 0:t.platform)||(null==(s=navigator)?void 0:s.platform)||"unknown";this.virtualScroll=new e({el:this.element,firefoxMultiplier:50,mouseMultiplier:i.indexOf("Win")>-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}}bindEvents(){this.luge.emitter.on("scroll",this.onScroll,this)}onScroll(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)}onVirtualScroll({deltaY:e,originalEvent:t}){const s=!!t.composedPath().find(e=>null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent"));t.ctrlKey||s||(this.targetScroll-=e,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)}tick(){const e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;const t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)}}class g extends r{constructor(e){super("cursor"),this.luge=e,this.cursors=[],this.pointers=[],this.trails=[],this.hoverTags=["a","button","input"]}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}}bindEvents(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})}pageInit(e){const t=this,s=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");s.length>0&&s.forEach(e=>{const s=this.getAttributes(e);s.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(e=>{e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.classList.add("lg-cursor-pointer"),t.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(e=>{const i=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=document.createElementNS("http://www.w3.org/2000/svg","path");i.appendChild(o),e.appendChild(i),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:o}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):s.length,e.classList.add("lg-cursor-trail"),t.trails.push(e)}),e.classList.add("lg-cursor"),this.cursors.push(e)}),e()}hoverHandler(e){const t=e.target,s=t.tagName.toLowerCase(),i=t.getAttribute("data-lg-hover");let o=null;(this.hoverTags.includes(s)||null!==i)&&(o="mouseenter"===e.type),null!==o&&this.cursors.forEach(e=>{e.classList.toggle("lg-cursor--hover",o),null!==i&&""!==i&&e.classList.toggle("lg-cursor--hover--"+i,o)})}tick(e){this.pointers.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+s.x+"px, "+s.y+"px, 0)"}),this.trails.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia;const i=e.luge.cursor.points;i.push({x:s.x,y:s.y}),i.length>e.luge.cursor.length&&i.shift();let o="",l=0;const n=(e,t)=>{const s=t.x-e.x,i=t.y-e.y;return{length:Math.sqrt(Math.pow(s,2)+Math.pow(i,2)),angle:Math.atan2(i,s)}},r=(e,t,s,i)=>{const o=n(t||e,s||e);l+=o.length;const r=o.angle+(i?Math.PI:0),a=.2*o.length;return[e.x+Math.cos(r)*a,e.y+Math.sin(r)*a]};o=((e,t)=>`${e.reduce((e,t,s,i)=>0===s?`M ${t.x},${t.y}`:`${e} ${((e,t,s)=>{const[i,o]=r(s[t-1],s[t-2],e),[l,n]=r(e,s[t-1],s[t+1],!0);return`C ${i},${o} ${l},${n} ${e.x},${e.y}`})(t,s,i)}`,"")}`)(i),e.luge.cursor.path.setAttribute("d",o),e.style.setProperty("--length",l)}})}}class p extends r{constructor(e){super("intersection"),this.luge=e,this.listeners={onViewportIntersect:this.onViewportIntersect.bind(this)}}init(){super.init(),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,class:String}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))}removeElement(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onViewportIntersect(e){const t=e.target,s=t.luge.viewport.position,i=!!t.luge.intersection.class&&t.luge.intersection.class.split(" ");t.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(t.classList.add("is-in"),i&&document.documentElement.classList.add(...i)):(i&&document.documentElement.classList.remove(...i),t.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))}}class m extends r{constructor(e){super("lottie"),this.luge=e,this.elements=[],this.doneLoad=null,this.onViewportIntersect=this.onViewportIntersect.bind(this),this.onScrollProgress=this.onScrollProgress.bind(this),e.lottie={deferInit:this.deferInit.bind(this)}}init(){super.init(),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()}deferInit(){"object"==typeof lottie&&(this.pageInit(()=>{}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())}setAttributes(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements(),this.reveal(()=>{})}pageLoad(e){let t=!1;this.elements.length>0&&this.elements.forEach(e=>{e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()}pageInit(e){this.addElements(),e()}addElements(){const e=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(t=>{if(!t.player){const s=this.getAttributes(t);this.luge.scrollobserver.add(t),s.lazy||(e.initPlayer(t),t.addEventListener("revealin",e.play)),t.addEventListener("viewportintersect",e.onViewportIntersect)}})}pageKill(e){const t=this;let s=[];const i=document.querySelector("[data-lg-page] + [data-lg-page]");s=i?i.querySelectorAll("[data-lg-lottie]"):this.elements,s.forEach(e=>{e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()}reveal(e){this.toAutoplay.forEach(e=>{"in"===e.viewportPosition&&e.play()}),e()}onViewportIntersect(e){const t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)}initLazy(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",()=>{e.play()},{once:!0})}initPlayer(e){const t=this;this.toLoad++;const s=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:s.renderer,loop:s.loop&&!s.reverse,autoplay:!1,path:s.root}),void 0!==s.subframe&&e.player.setSubframe(s.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),s.autoplay&&this.toAutoplay.push(e),s.required&&this.requireds++,s.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):s.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){const i=Math.round(e.player.currentFrame);1===e.player.playDirection?i===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(s.reverse?()=>{e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:()=>{e.player.goToAndPlay(s.loopFrame,!0)},this)):i===s.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(()=>{e.player.setDirection(1),e.player.goToAndPlay(s.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",()=>{e.classList.add("is-loaded"),t.playerLoaded(s.required)},{once:!0})}setPlayerStateClasses(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")}playerLoaded(e=!1){this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(()=>{this.luge.emitter.emit("resize")})}play(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))}pause(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))}stop(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))}onScrollProgress(e){const t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)}}class v extends r{constructor(e){super("mouse"),this.luge=e,this.elements=[],this.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))}removeElement(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}getMouseMovement(){const e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,s=Math.hypot(e,t);if(window.mouseSpeed+=.5*(s-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),s>1){const s=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=s,window.mouseDirection=s>=45&&s<135?"down":s>=135&&s<225?"left":s>=225&&s<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)}tick(){this.elements.forEach(e=>{const t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);const s=Math.round(1e3*(t.x-t.smoothX))/1e3,i=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(s)),e.style.setProperty("--diff-x",s),e.style.setProperty("--abs-diff-y",Math.abs(i)),e.style.setProperty("--diff-y",i)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})}}class b extends r{constructor(e){super("parallax"),this.luge=e,this.elements=[],this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.amplitude){const e=t.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.amplitude=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.amplitude)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}addElements(){document.querySelectorAll("[data-lg-parallax]").forEach(e=>{const t=this.getAttributes(e).disable;let s=!0;const i=(window.luge.browser||{}).is;t&&i&&("desktop"===t&&i("desktop")||"handheld"===t&&!i("desktop")||"mobile"===t&&i("mobile")||"tablet"===t&&i("tablet"))&&(s=!1),s&&this.addElement(e)})}addElement(e){this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(()=>{e.addEventListener("scrollprogress",this.onScrollProgress),this.moveElement(e)}))}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}onScrollProgress(e){this.moveElement(e.target)}moveElement(e){let t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2}tick(){this.elements.forEach(e=>{e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})}}class y{constructor(e){const s=document.documentElement,i=t.getParser(window.navigator.userAgent);s.classList.add("is-"+i.getPlatformType()),(i.is("mobile")||i.is("tablet"))&&s.classList.add("is-handheld"),i.is("Safari")&&(s.classList.add("is-safari"),s.classList.add("is-safari-"+i.getBrowserVersion())),e.browser=i}}var w=new class{constructor(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}init(e){this.createObserver(),e()}createObserver(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[n.settings.intersection.threshold]})}intersectionCallback(e){e.forEach(e=>{const t=e.target;let s="in";e.isIntersecting||(s=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==s&&(t.luge.viewport.position=s,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===s?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+s))))})}add(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))}remove(e){this.observer.unobserve(e)}},f=new class{constructor(){this.callbacks=[],this.onceCallbacks=[],n.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}add(e,t){let s=!1;this.callbacks.forEach(i=>{i.cb===e&&i.context===t&&(s=!0)}),s||this.callbacks.push({cb:e,context:t})}remove(e,t){const s=this;this.callbacks.forEach((i,o)=>{i.cb===e&&i.context===t&&delete s.callbacks[o]})}nextTick(e,t){this.onceCallbacks.push({cb:e,context:t})}_tick(e){const t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),n.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))}tick(e){const t=this;this.callbacks.forEach(t=>{t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach((s,i)=>{s.cb.apply(s.context,[e]),delete t.onceCallbacks[i]})}},E=new class{constructor(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),f.add(this.tick,this),this.bindEvents()}bindEvents(){o.on("mouseMove",this.mouseHandler,this),o.on("resize",this.resizeHandler,this),o.on("update",this.updateHandler,this),o.on("scroll",this.scrollHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],e()}init(e){this.getBoundingThrottle(),e()}resizeHandler(){this.getBoundingThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle()},this)}scrollHandler(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)}mouseHandler(){const e=this;this.elements.forEach(t=>{e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop}getBoundingThrottle(){this.elementsToBound=this.elements,f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e),this.setElementPosition(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect(),o={anchor:{x:s.left,y:s.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,o)),e.setAttribute("style",t)}setElementPosition(e){if(e.luge&&e.luge.anchor){const t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}}add(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)}tick(){const e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(t=>{e.setElementPosition(t)})}},S=new class{constructor(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}bindEvents(){o.on("resize",this.resizeHandler,this),o.on("scroll",this.scrollHandler,this),o.on("update",this.updateHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()}init(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()}resizeHandler(){this.getBoundingThrottle(),this.checkElementsThrottle()}scrollHandler(){this.checkElementsThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle(),this.checkElementsThrottle()},this)}setMaxScrollTop(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight}getBoundingThrottle(){this.setMaxScrollTop(),this.elements.forEach(e=>{this.elementsToBound.includes(e)||(e.scrollProgress=0,this.elementsToBound.push(e))}),f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect();e.scrollStart=s.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)}checkElementsThrottle(){this.elements.forEach(e=>{this.elementsToCheck.includes(e)||this.elementsToCheck.push(e)}),f.nextTick(this.checkElements.bind(this))}checkElements(){this.elementsToCheck.forEach(e=>{this.checkElement(e)}),this.elementsToCheck=[]}checkElement(e){const t=window.unifiedScrollTop;let s="",i=0;i=e.scrollStart<0?Math.min(Math.max(t/e.scrollEnd,0),1):Math.min(Math.max((t-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(i)&&(i=0),s=i<=0&&e.scrollStart>0?"under":i>=1&&e.scrollEnd0&&i<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))}add(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)}},x=class{constructor(){this.plugins={},this.emitter={emit:o.emit.bind(o),off:o.off.bind(o),on:o.on.bind(o),once:o.once.bind(o)},this.viewportobserver={add:w.add.bind(w),remove:w.remove.bind(w)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:E.add.bind(E),remove:E.remove.bind(E)},this.scrollobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.ticker={add:f.add.bind(f),nextTick:f.nextTick.bind(f),remove:f.remove.bind(f),tick:f.tick.bind(f)},this.settings=n.setSettings.bind(n)}init(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle("load"),{once:!0}):this.ticker.nextTick(()=>{l.cycle("load")},null)}addPlugin(e,t){this.plugins[e]=new t(this)}get _settings(){return n.settings}};export{y as Browser,g as Cursor,p as Intersection,m as LottiePlayer,x as Luge,v as MouseAnimation,b as Parallax,r as Plugin,a as Preloader,d as Reveal,h as ScrollAnimation,u as SmoothScroll,c as Transition}; +import e from"virtual-scroll";import t from"bowser/src/bowser.js";class s{static isArray(e){return e&&"object"==typeof e&&Array.isArray(e)}static isObject(e){return e&&"object"==typeof e&&!Array.isArray(e)}static isString(e){return e&&"string"==typeof e}static mergeDeep(e,t){const i=Object.assign({},e);return s.isObject(e)&&s.isObject(t)&&Object.keys(t).forEach(o=>{s.isObject(t[o])?o in e?i[o]=s.isObject(e[o])&&s.isObject(t[o])?s.mergeDeep(e[o],t[o]):t[o]:Object.assign(i,{[o]:t[o]}):Object.assign(i,{[o]:t[o]})}),i}static toCamelCase(e){return s.isString(e)?e.replace(/(?:^\w|[A-Z]|\b\w)/g,(e,t)=>0===t?e.toLowerCase():e.toUpperCase()).replace(/\W+/g,""):e}static toUpperCamelCase(e){return s.isString(e)?(e=s.toCamelCase(e)).charAt(0).toUpperCase()+e.slice(1):e}static isInPage(e){return e!==document.body&&document.body.contains(e)}static deepFreeze(e){return Object.keys(e).forEach(t=>{"object"==typeof e[t]&&s.deepFreeze(e[t])}),Object.freeze(e)}static clamp(e,t,s){return Math.min(s,Math.max(t,e))}}var i=s,o=new class{constructor(){this.events=[]}on(e,t,s,i=!1){(this.events[e]||(this.events[e]=[])).push({cb:t,context:s,once:i})}once(e,t,s){this.on(e,t,s,!0)}emit(e){const t=this,s=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach((i,o)=>{i.cb.apply(i.context,s),i.once&&delete t.events[e][o]})}off(e,t){const s=this;this.events[e]&&this.events[e].forEach((i,o)=>{i.cb===t&&delete s.events[e][o]})}},l=new class{constructor(){this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(e=>{this.events[e]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}cycle(e){if(this.cycles[e]){this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e);for(const e in this.events)this.events[e].done=0;this.proceed(e)}}proceed(e){const t=this.cycles[e].events,s=this.cycles[e].current;if(s{this.do(e,t)}):this.do(e,i)}else this.debug&&console.log(e+" cycle ended")}next(e){const t=this,s=this.cycles[e].events,i=this.cycles[e].current;if(i1&&n.forEach(e=>{(0===t.events[e].done||t.events[e].done{o.callback===t&&o.cycle===s&&delete i.events[e].callbacks[l]})}do(e,t){this.events[t].done=0,this.events[t].callbacks.length>0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),o.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort((e,t)=>e.position-t.position).forEach(s=>{null===s.cycle||s.cycle===e?s.callback(()=>this.done(e,t)):this.done(e,t)})):this.done(e,t)}done(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),o.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)}enableDebug(e=!0){this.debug=e}},n=new class{constructor(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}setSettings(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))}siteInit(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()}bindEvents(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})}mouseHandler(e){const t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,o.emit("mouseMove",e)}resizeThrottle(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)}resizeHandler(){this.setCSSProperties(),o.emit("resize")}setCSSProperties(){const e=window.innerWidth;this.windowWidth!==e&&(this.windowWidth=e,this.clientWidth=document.body.clientWidth);const t=window.innerHeight;this.windowHeight!==t&&(this.windowHeight=t,this.clientHeight=document.body.clientHeight),requestAnimationFrame(()=>{document.documentElement.style.setProperty("--vw",.01*this.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*this.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*this.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*this.clientHeight+"px")})}scrollHandler(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,o.emit("scroll")}scrollStart(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),o.emit("scrollStart")}scrollEnd(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),o.emit("scrollEnd")}showCredits(){if(this.settings.credits.show){const e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,e+"font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}}};class r{constructor(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}beforeInit(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()}init(){this.setAttributes()}disabled(){return!!(n.settings[this.pluginSlug]||{}).disabled}setAttributes(){this.pluginAttributes={}}getAttributes(e){const t=this.pluginAttributes,s={};for(const o in t){const l=t[o];let n="lg-"+this.pluginSlug;"root"!==o&&(n+="-"+o),n=i.toCamelCase(n);const r=e.dataset[n];let a,d,c;"object"==typeof l?(a=l[0],c=l[1]):a=l,d=void 0===r&&void 0!==c?a(c):(void 0!==r||a!==Boolean)&&(void 0!==r?a===Boolean?"false"!==r:a(r):void 0),s[o]=d}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=s),s}}class a extends r{constructor(e){super("preloader"),this.luge=e,this.intro=!1,this.playerIn=!1,this.startTime=Date.now(),this.doneLoad=null,e.preloader={add:this.add.bind(this)}}init(){super.init(),this.el=document.querySelector("[data-lg-preloader]"),this.el&&(this.attributes=this.getAttributes(this.el),this.el.classList.add("lg-preloader","lg-preloader--"+this.attributes.root),this.initLottie(),this.luge.lifecycle.add("siteIn",this.siteIn.bind(this))),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this))}setAttributes(){this.pluginAttributes={root:[String,""],duration:[Number,this.luge._settings.preloader.duration],in:String,reverse:Boolean}}pageLoad(e){this.attributes&&"lottie"===this.attributes.root&&"object"==typeof lottie?this.doneLoad=e:e()}siteIn(e){const t=(Date.now()-this.startTime)/1e3,s=this.attributes.duration-t;if(s<=0){const t=this.clear.bind(this,e);if(this.playerIn)this.playerIn.play(),this.playerIn.addEventListener("complete",t,{once:!0});else if("function"==typeof this.intro)this.intro(e,this.remove.bind(this));else{const e=window.getComputedStyle(this.el).getPropertyValue("transition-duration");""!==e&&"0s"!==e?(this.el.addEventListener("transitionend",t,{once:!0}),this.el.classList.add("is-hidden")):t()}}else setTimeout(this.siteIn.bind(this,e),1e3*s)}clear(e){this.playerIn&&this.playerIn.destroy(),this.remove(),e()}remove(e){this.el.parentNode.removeChild(this.el),this.el=null}add(e){this.intro=e}initLottie(){const e=this;if("lottie"===this.attributes.root&&"object"==typeof lottie){const t=this.attributes.in;let s=!1;t&&(s=lottie.loadAnimation({container:this.el,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}}),this.attributes.reverse&&s.setDirection(-1)),s.addEventListener("DOMLoaded",()=>{e.attributes.reverse&&s.goToAndStop(s.totalFrames-1,!0),e.el.setAttribute("style",""),"function"==typeof e.doneLoad&&(e.doneLoad(),e.doneLoad=null)},{once:!0}),this.playerIn=s}}}class d extends r{constructor(e){super("reveal"),this.luge=e,this.elements=[],this.toRevealIn=[],this.toRevealOut=[],this.reveals={in:{},out:{}},this.canReveal=!1,this.onScrollProgress=this.onScrollProgress.bind(this),e.reveal={add:this.add.bind(this)}}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),11),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this)),this.bindEvents()}setAttributes(){super.setAttributes(),this.pluginAttributes={root:String,stagger:String,manual:[Boolean,!1],multiple:Boolean,delay:[Number,0]}}getAttributes(e){const t=super.getAttributes(e);return void 0!==t.stagger&&""===t.stagger?t.stagger=this.luge._settings.reveal.stagger:void 0===t.stagger&&(t.stagger=!1),t}bindEvents(){this.luge.emitter.on("resize",this.resizeHandler,this),this.luge.emitter.on("scroll",this.scrollHandler,this),this.luge.emitter.on("update",this.updateHandler,this)}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-reveal]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);if(!t.stagger&&null!==e.closest("[data-lg-reveal-stagger]"))return;const s=t.root;e.luge.reveal.name=i.toCamelCase(s),t.manual?(e.luge.reveal.in=()=>{this.revealCallback(e,e.luge.reveal.name,"in"),this.setRevealClasses(e,"is-in")},e.luge.reveal.out=()=>{this.revealCallback(e,e.luge.reveal.name,"out"),this.setRevealClasses(e,"is-out")}):(this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress)),e.luge.reveal.delay=1e3*t.delay,t.stagger?Array.from(e.children).forEach(e=>{const t=e.dataset.lgReveal;e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),(t||s)&&e.classList.add("lg-reveal--"+(null!=t?t:s)),e.dataset.lgRevealChild="",(e.luge||(e.luge={}))&&(e.luge.reveal={isRevealed:!1})}):(e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),s&&e.classList.add("lg-reveal--"+s)),this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.canReveal=!1,this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){const t=e.target,s=this.luge._settings.reveal.threshold;t.scrollProgress>=s&&t.scrollProgress<=1-s&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-s&&t.scrollEnd{e.scrollStart<0&&(this.toRevealIn.includes(e)||this.toRevealIn.push(e))}),this.revealElements(),e()}resizeHandler(){this.revealElements()}scrollHandler(){this.revealElements()}updateHandler(){this.addElements(),this.revealElements()}revealElements(){const e=this;if(this.canReveal){let t=0;this.toRevealIn.forEach(s=>{const o=i.toCamelCase(s.luge.reveal.root);t+=s.luge.reveal.delay,setTimeout(function(){e.revealCallback(s,o,"in"),s.luge.reveal.stagger?Array.from(s.children).forEach((t,l)=>{const n=i.toCamelCase(t.dataset.lgReveal);setTimeout(()=>{(n||o)&&e.revealCallback(t,null!=n?n:o,"in"),e.setRevealClasses(t,"is-in")},l*s.luge.reveal.stagger*1e3)}):e.setRevealClasses(s,"is-in")},t),t+=1e3*this.luge._settings.reveal.stagger,s.luge.reveal.multiple||e.removeElement(s)}),this.toRevealOut.forEach(t=>{const s=i.toCamelCase(t.luge.reveal.root);void 0!==t.luge.reveal.isRevealed&&e.revealCallback(t,s,"out");let o="";o=t.scrollProgress>.5?"is-out is-out-top":"is-out is-out-bottom",t.luge.reveal.stagger?Array.from(t.children).forEach((l,n)=>{const r=i.toCamelCase(l.dataset.lgReveal);setTimeout(()=>{(r||s)&&e.revealCallback(l,null!=r?r:s,"out"),e.setRevealClasses(l,o)},n*t.luge.reveal.stagger*1e3)}):e.setRevealClasses(t,o)}),this.toRevealIn=[],this.toRevealOut=[]}}setRevealClasses(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(t=>{e.classList.add(t)})}revealCallback(e,t,s){e.dispatchEvent(new CustomEvent("reveal"+s)),e.luge.reveal.isRevealed="in"===s,"function"==typeof this.reveals[s][t]?this.reveals[s][t](e):"function"==typeof e["onreveal"+s]&&e["onreveal"+s]()}add(e,t,s){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=s)}}class c extends r{constructor(e){super("transition"),this.luge=e,this.url=window.location.href,this.pathname=window.location.pathname,this.pageFetched=null,this.currentPage=null,this.reload=this.luge._settings.transition.reload,this.prevScrollTop=0,this.newScrollTop=0,this.transitions={in:{},out:{}},this.listeners={linkHandler:this.linkHandler.bind(this)},e.transition={add:this.add.bind(this)}}init(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")}bindLinksEvent(){document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(e=>{e.addEventListener("click",this.listeners.linkHandler)})}unbindLinksEvent(){document.querySelectorAll("a").forEach(e=>{e.removeEventListener("click",this.listeners.linkHandler)})}linkHandler(e){const t=e.currentTarget,s=t.getAttribute("href");if(s&&0!==s.indexOf("#")&&0!==s.indexOf("tel")&&0!==s.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===s.indexOf(window.location.origin)||0===s.indexOf("/")||-1===s.indexOf("/"))){if(e.preventDefault(),window.location.href===s)return;this.navigateTo(s),history.pushState(null,null,this.url)}}navigateTo(e){if(this.url=e,this.reload){const t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",t=>{window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")}pageInit(e){this.bindLinksEvent(),e()}initLoader(){const e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(()=>{e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){const t=e.getAttribute("data-lg-loader-out");let s=!1,i=e.getAttribute("data-lg-loader-in"),o=!1;t&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===i&&(i=t),i&&(o=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:i,rendererSettings:{preserveAspectRatio:"none"}}),i===t&&o.setDirection(-1)),e.playerOut=s,e.playerIn=o}}pageFetch(e){const t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(s){t.pageFetched=s,e()})}pageCreate(e){const t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),s=t.querySelector("[data-lg-page]");if(s){{this.currentPage.insertAdjacentElement("beforebegin",s),s.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{document.querySelector("head title").insertAdjacentElement("afterend",e)});const e=document.querySelector("head title"),i=t.querySelector("head title");e&&i&&(e.innerText=i.innerText)}window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url}pageKill(e){const t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()}pageOut(e){const t=this,s=document.querySelector("[data-lg-page]");if(s){const o=i.toCamelCase(s.getAttribute("data-lg-page"));let l=!1;if("function"==typeof this.transitions.out[o]?l=this.transitions.out[o]:"function"==typeof s.onpageout?l=s.onpageout:"function"==typeof this.transitions.out.default&&(l=this.transitions.out.default),l)l(s,e);else{const s=document.querySelector("[data-lg-loader]");if(s){if(s.playerOut)s.playerOut.stop(),s.playerOut.renderer.svgElement.style.opacity=1,s.playerOut.play(),s.playerOut.addEventListener("complete",()=>{t.reload||(s.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{const t=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==t&&"0s"!==t?s.addEventListener("transitionend",e,{once:!0}):e()}s.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)}pageIn(e){const t=document.querySelector("[data-lg-page]");if(t){const s=i.toCamelCase(t.getAttribute("data-lg-page"));let o=!1;if(t.style.opacity="","function"==typeof this.transitions.in[s]?o=this.transitions.in[s]:"function"==typeof t.onpagein?o=t.onpagein:"function"==typeof this.transitions.in.default&&(o=this.transitions.in.default),o)o(t,e);else{const t=document.querySelector("[data-lg-loader]");if(t&&t.classList.contains("is-visible"))if(t.playerIn)t.playerIn.stop(),t.playerIn.renderer.svgElement.style.opacity=1,"reverse"===t.getAttribute("data-lg-loader-in")?t.playerIn.goToAndPlay(t.playerIn.totalFrames,!0):t.playerIn.play(),t.playerIn.addEventListener("complete",()=>{t.playerIn.renderer.svgElement.style.opacity="",t.classList.remove("is-visible"),e()},{once:!0});else{const s=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==s&&"0s"!==s?t.addEventListener("transitionend",e,{once:!0}):e(),t.classList.remove("is-visible")}else e()}}else e()}historyStateChanged(){let e="";e=0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url),e.pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(()=>{this.newScrollTop=window.scrollY,window.scroll({top:this.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))}add(e,t="default",s){this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=s)}}class h extends r{constructor(e){super("scroll"),this.luge=e,this.elements=[],this.allowedProperties=["opacity","background-x","background-y"],this.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],this.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);const s={};s.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,s.yoyo=t.yoyo,s.inertia=t.inertia;let i=!1;if(void 0!==t.animate?i=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(i=this.presets[t.root]),i){const e={};for(const t in i)if(this.allowedProperties.includes(t)||this.transformProperties.includes(t)){const s=i[t];let o=String(s[0]),l=String(s[1]),n=o.match(/\d+([a-zA-Z%]+)/m);n?n=n[1]:0===t.indexOf("rotate")&&(n="deg"),o=Number(o.replace(n,"")),l=Number(l.replace(n,""));let r=t;"background-x"===t?r="background-position-x":"background-y"===t&&(r="background-position-y"),e[r]={from:o,to:l,current:o,unit:n}}s.properties=e}e.luge.scroll.animation=s,this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){e.target.luge.scroll.animation.atDest=!1}tick(){for(const e of this.elements){if(e.luge.scroll.animation.atDest)continue;let t=e.scrollProgress;if(e.luge.scroll.yoyo&&(t=1-Math.abs(1-2*t)),e.luge.scroll.animation.smoothProgress+=(t-e.luge.scroll.animation.smoothProgress)*(1-e.luge.scroll.inertia),e.luge.scroll.animation.properties){const t={};for(const[s,i]of Object.entries(e.luge.scroll.animation.properties))i.current=i.from+(i.to-i.from)*e.luge.scroll.animation.smoothProgress,["x","y","z"].includes(s)?(t.translate3d||(t.translate3d={}))&&(t.translate3d[s]=i.current+i.unit):t[s]=i.current+i.unit;const s=[];for(const[e,i]of Object.entries(t))if(this.transformProperties.includes(e)){if("object"==typeof i)if("translate3d"===e){const e=Object.assign({x:0,y:0,z:0},i);i.string=e.x+", "+e.y+", "+e.z}else i.string=Object.values(i).join(", ");s.push(e+"("+("object"!=typeof i?i:i.string)+")")}const i={},o=[];s.length>0&&(i.transform=s.join(" "),o.push("transform"));for(const[e,s]of Object.entries(t))this.transformProperties.includes(e)||(i[e]=s,o.push(e));for(const[t,s]of Object.entries(i))e.style.setProperty(t,s);e.style.setProperty("will-change",o.join(", "))}else{const t=Math.round(1e3*(e.scrollProgress-e.luge.scroll.animation.smoothProgress))/1e3;e.style.setProperty("--progress",e.luge.scroll.animation.smoothProgress),e.style.setProperty("--abs-diff",Math.abs(t)),e.style.setProperty("--diff",t)}Math.abs(t-e.luge.scroll.animation.smoothProgress)<1e-4&&(e.luge.scroll.animation.atDest=!0)}}}class u extends r{constructor(){super("smooth"),window.hasSmoothScroll=!1,window.isSmoothScrolling=!1}init(){if(super.init(),this.element=document.documentElement,this.hasSmooth=this.element.hasAttribute("data-lg-smooth"),this.hasSmooth){var t,s;window.hasSmoothScroll=!0,this.smoothScroll=window.scrollTop,this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,document.documentElement.classList.add("has-smooth-scroll");const i=(null==(t=navigator)||null==(t=t.userAgentData)?void 0:t.platform)||(null==(s=navigator)?void 0:s.platform)||"unknown";this.virtualScroll=new e({el:this.element,firefoxMultiplier:50,mouseMultiplier:i.indexOf("Win")>-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}}bindEvents(){this.luge.emitter.on("scroll",this.onScroll,this)}onScroll(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)}onVirtualScroll({deltaY:e,originalEvent:t}){const s=!!t.composedPath().find(e=>null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent"));t.ctrlKey||s||(this.targetScroll-=e,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)}tick(){const e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;const t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)}}class g extends r{constructor(e){super("cursor"),this.luge=e,this.cursors=[],this.pointers=[],this.trails=[],this.hoverTags=["a","button","input"]}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}}bindEvents(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})}pageInit(e){const t=this,s=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");s.length>0&&s.forEach(e=>{const s=this.getAttributes(e);s.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(e=>{e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.classList.add("lg-cursor-pointer"),t.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(e=>{const i=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=document.createElementNS("http://www.w3.org/2000/svg","path");i.appendChild(o),e.appendChild(i),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:o}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):s.length,e.classList.add("lg-cursor-trail"),t.trails.push(e)}),e.classList.add("lg-cursor"),this.cursors.push(e)}),e()}hoverHandler(e){const t=e.target,s=t.tagName.toLowerCase(),i=t.getAttribute("data-lg-hover");let o=null;(this.hoverTags.includes(s)||null!==i)&&(o="mouseenter"===e.type),null!==o&&this.cursors.forEach(e=>{e.classList.toggle("lg-cursor--hover",o),null!==i&&""!==i&&e.classList.toggle("lg-cursor--hover--"+i,o)})}tick(e){this.pointers.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+s.x+"px, "+s.y+"px, 0)"}),this.trails.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia;const i=e.luge.cursor.points;i.push({x:s.x,y:s.y}),i.length>e.luge.cursor.length&&i.shift();let o="",l=0;const n=(e,t)=>{const s=t.x-e.x,i=t.y-e.y;return{length:Math.sqrt(Math.pow(s,2)+Math.pow(i,2)),angle:Math.atan2(i,s)}},r=(e,t,s,i)=>{const o=n(t||e,s||e);l+=o.length;const r=o.angle+(i?Math.PI:0),a=.2*o.length;return[e.x+Math.cos(r)*a,e.y+Math.sin(r)*a]};o=((e,t)=>`${e.reduce((e,t,s,i)=>0===s?`M ${t.x},${t.y}`:`${e} ${((e,t,s)=>{const[i,o]=r(s[t-1],s[t-2],e),[l,n]=r(e,s[t-1],s[t+1],!0);return`C ${i},${o} ${l},${n} ${e.x},${e.y}`})(t,s,i)}`,"")}`)(i),e.luge.cursor.path.setAttribute("d",o),e.style.setProperty("--length",l)}})}}class p extends r{constructor(e){super("intersection"),this.luge=e,this.listeners={onViewportIntersect:this.onViewportIntersect.bind(this)}}init(){super.init(),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,class:String}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))}removeElement(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onViewportIntersect(e){const t=e.target,s=t.luge.viewport.position,i=!!t.luge.intersection.class&&t.luge.intersection.class.split(" ");t.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(t.classList.add("is-in"),i&&document.documentElement.classList.add(...i)):(i&&document.documentElement.classList.remove(...i),t.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))}}class m extends r{constructor(e){super("lottie"),this.luge=e,this.elements=[],this.doneLoad=null,this.onViewportIntersect=this.onViewportIntersect.bind(this),this.onScrollProgress=this.onScrollProgress.bind(this),e.lottie={deferInit:this.deferInit.bind(this)}}init(){super.init(),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()}deferInit(){"object"==typeof lottie&&(this.pageInit(()=>{}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())}setAttributes(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements(),this.reveal(()=>{})}pageLoad(e){let t=!1;this.elements.length>0&&this.elements.forEach(e=>{e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()}pageInit(e){this.addElements(),e()}addElements(){const e=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(t=>{if(!t.player){const s=this.getAttributes(t);this.luge.scrollobserver.add(t),s.lazy||(e.initPlayer(t),t.addEventListener("revealin",e.play)),t.addEventListener("viewportintersect",e.onViewportIntersect)}})}pageKill(e){const t=this;let s=[];const i=document.querySelector("[data-lg-page] + [data-lg-page]");s=i?i.querySelectorAll("[data-lg-lottie]"):this.elements,s.forEach(e=>{e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()}reveal(e){this.toAutoplay.forEach(e=>{"in"===e.viewportPosition&&e.play()}),e()}onViewportIntersect(e){const t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)}initLazy(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",()=>{e.play()},{once:!0})}initPlayer(e){const t=this;this.toLoad++;const s=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:s.renderer,loop:s.loop&&!s.reverse,autoplay:!1,path:s.root}),void 0!==s.subframe&&e.player.setSubframe(s.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),s.autoplay&&this.toAutoplay.push(e),s.required&&this.requireds++,s.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):s.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){const i=Math.round(e.player.currentFrame);1===e.player.playDirection?i===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(s.reverse?()=>{e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:()=>{e.player.goToAndPlay(s.loopFrame,!0)},this)):i===s.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(()=>{e.player.setDirection(1),e.player.goToAndPlay(s.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",()=>{e.classList.add("is-loaded"),t.playerLoaded(s.required)},{once:!0})}setPlayerStateClasses(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")}playerLoaded(e=!1){this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(()=>{this.luge.emitter.emit("resize")})}play(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))}pause(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))}stop(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))}onScrollProgress(e){const t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)}}class v extends r{constructor(e){super("mouse"),this.luge=e,this.elements=[],this.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))}removeElement(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}getMouseMovement(){const e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,s=Math.hypot(e,t);if(window.mouseSpeed+=.5*(s-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),s>1){const s=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=s,window.mouseDirection=s>=45&&s<135?"down":s>=135&&s<225?"left":s>=225&&s<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)}tick(){this.elements.forEach(e=>{const t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);const s=Math.round(1e3*(t.x-t.smoothX))/1e3,i=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(s)),e.style.setProperty("--diff-x",s),e.style.setProperty("--abs-diff-y",Math.abs(i)),e.style.setProperty("--diff-y",i)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})}}class b extends r{constructor(e){super("parallax"),this.luge=e,this.elements=[],this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.amplitude){const e=t.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.amplitude=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.amplitude)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}addElements(){document.querySelectorAll("[data-lg-parallax]").forEach(e=>{const t=this.getAttributes(e).disable;let s=!0;const i=(window.luge.browser||{}).is;t&&i&&("desktop"===t&&i("desktop")||"handheld"===t&&!i("desktop")||"mobile"===t&&i("mobile")||"tablet"===t&&i("tablet"))&&(s=!1),s&&this.addElement(e)})}addElement(e){this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(()=>{e.addEventListener("scrollprogress",this.onScrollProgress),this.moveElement(e)}))}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}onScrollProgress(e){this.moveElement(e.target)}moveElement(e){let t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2}tick(){this.elements.forEach(e=>{e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})}}class y{constructor(e){const s=document.documentElement,i=t.getParser(window.navigator.userAgent);s.classList.add("is-"+i.getPlatformType()),(i.is("mobile")||i.is("tablet"))&&s.classList.add("is-handheld"),i.is("Safari")&&(s.classList.add("is-safari"),s.classList.add("is-safari-"+i.getBrowserVersion())),e.browser=i}}var w=new class{constructor(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}init(e){this.createObserver(),e()}createObserver(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[n.settings.intersection.threshold]})}intersectionCallback(e){e.forEach(e=>{const t=e.target;let s="in";e.isIntersecting||(s=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==s&&(t.luge.viewport.position=s,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===s?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+s))))})}add(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))}remove(e){this.observer.unobserve(e)}},f=new class{constructor(){this.callbacks=[],this.onceCallbacks=[],n.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}add(e,t){let s=!1;this.callbacks.forEach(i=>{i.cb===e&&i.context===t&&(s=!0)}),s||this.callbacks.push({cb:e,context:t})}remove(e,t){const s=this;this.callbacks.forEach((i,o)=>{i.cb===e&&i.context===t&&delete s.callbacks[o]})}nextTick(e,t){this.onceCallbacks.push({cb:e,context:t})}_tick(e){const t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),n.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))}tick(e){const t=this;this.callbacks.forEach(t=>{t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach((s,i)=>{s.cb.apply(s.context,[e]),delete t.onceCallbacks[i]})}},E=new class{constructor(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),f.add(this.tick,this),this.bindEvents()}bindEvents(){o.on("mouseMove",this.mouseHandler,this),o.on("resize",this.resizeHandler,this),o.on("update",this.updateHandler,this),o.on("scroll",this.scrollHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],e()}init(e){this.getBoundingThrottle(),e()}resizeHandler(){this.getBoundingThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle()},this)}scrollHandler(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)}mouseHandler(){const e=this;this.elements.forEach(t=>{e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop}getBoundingThrottle(){this.elementsToBound=this.elements,f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e),this.setElementPosition(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect(),o={anchor:{x:s.left,y:s.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,o)),e.setAttribute("style",t)}setElementPosition(e){if(e.luge&&e.luge.anchor){const t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}}add(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)}tick(){const e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(t=>{e.setElementPosition(t)})}},S=new class{constructor(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}bindEvents(){o.on("resize",this.resizeHandler,this),o.on("scroll",this.scrollHandler,this),o.on("update",this.updateHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()}init(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()}resizeHandler(){this.getBoundingThrottle(),this.checkElementsThrottle()}scrollHandler(){this.checkElementsThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle(),this.checkElementsThrottle()},this)}setMaxScrollTop(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight}getBoundingThrottle(){this.setMaxScrollTop(),this.elements.forEach(e=>{this.elementsToBound.includes(e)||(e.scrollProgress=0,this.elementsToBound.push(e))}),f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect();e.scrollStart=s.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)}checkElementsThrottle(){this.elements.forEach(e=>{this.elementsToCheck.includes(e)||this.elementsToCheck.push(e)}),f.nextTick(this.checkElements.bind(this))}checkElements(){this.elementsToCheck.forEach(e=>{this.checkElement(e)}),this.elementsToCheck=[]}checkElement(e){const t=window.unifiedScrollTop;let s="",i=0;i=e.scrollStart<0?Math.min(Math.max(t/e.scrollEnd,0),1):Math.min(Math.max((t-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(i)&&(i=0),s=i<=0&&e.scrollStart>0?"under":i>=1&&e.scrollEnd0&&i<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))}add(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)}},x=class{constructor(){this.plugins={},this.emitter={emit:o.emit.bind(o),off:o.off.bind(o),on:o.on.bind(o),once:o.once.bind(o)},this.viewportobserver={add:w.add.bind(w),remove:w.remove.bind(w)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:E.add.bind(E),remove:E.remove.bind(E)},this.scrollobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.ticker={add:f.add.bind(f),nextTick:f.nextTick.bind(f),remove:f.remove.bind(f),tick:f.tick.bind(f)},this.settings=n.setSettings.bind(n)}init(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(()=>{l.cycle("load")},null)}addPlugin(e,t){this.plugins[e]=new t(this)}get _settings(){return n.settings}};export{y as Browser,g as Cursor,p as Intersection,m as LottiePlayer,x as Luge,v as MouseAnimation,b as Parallax,r as Plugin,a as Preloader,d as Reveal,h as ScrollAnimation,u as SmoothScroll,c as Transition}; //# sourceMappingURL=luge.modern.js.map diff --git a/dist/js/luge.modern.js.map b/dist/js/luge.modern.js.map index a2c956f..367ffe5 100644 --- a/dist/js/luge.modern.js.map +++ b/dist/js/luge.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"luge.modern.js","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/plugins/Browser.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers","[object Object]","item","Array","isArray","target","source","output","Object","assign","isObject","keys","forEach","key","mergeDeep","string","isString","replace","word","index","toLowerCase","toUpperCase","toCamelCase","charAt","slice","node","document","body","contains","obj","prop","deepFreeze","freeze","x","lower","upper","Math","min","max","Helpers$1","Emitter$1","constructor","this","events","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","length","event","do","next","wait","requestAnimationFrame","bind","add","position","remove","Emitter","sort","a","b","enableDebug","value","Core","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","LifeCycle","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","Luge","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","super","intro","playerIn","startTime","Date","now","doneLoad","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","default","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","progress","abs","entries","translate3d","transform","y","z","join","styles","willChange","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","clamp","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","line","pointA","pointB","lengthX","lengthY","sqrt","pow","angle","atan2","controlPoint","previous","o","PI","cos","sin","svgPath","command","reduce","acc","point","i","bezierCommand","cpsX","cpsY","cpeX","cpeY","Intersection","onViewportIntersect","class","viewportobserver","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","elementsToBound","Ticker","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","checkElement","isNaN","plugins","ViewportObserver","MouseObserver","readyState","addPlugin"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"luge.modern.js","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/plugins/Browser.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers","[object Object]","item","Array","isArray","target","source","output","Object","assign","isObject","keys","forEach","key","mergeDeep","string","isString","replace","word","index","toLowerCase","toUpperCase","toCamelCase","charAt","slice","node","document","body","contains","obj","prop","deepFreeze","freeze","x","lower","upper","Math","min","max","Helpers$1","Emitter$1","constructor","this","events","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","length","event","do","next","wait","requestAnimationFrame","bind","add","position","remove","Emitter","sort","a","b","enableDebug","value","Core","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","LifeCycle","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","Luge","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","super","intro","playerIn","startTime","Date","now","doneLoad","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","default","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","progress","abs","entries","translate3d","transform","y","z","join","styles","willChange","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","clamp","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","line","pointA","pointB","lengthX","lengthY","sqrt","pow","angle","atan2","controlPoint","previous","o","PI","cos","sin","svgPath","command","reduce","acc","point","i","bezierCommand","cpsX","cpsY","cpeX","cpeY","Intersection","onViewportIntersect","class","viewportobserver","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","elementsToBound","Ticker","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","checkElement","isNaN","plugins","ViewportObserver","MouseObserver","readyState","addPlugin"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/luge.module.js b/dist/js/luge.module.js index 62d0113..9293321 100644 --- a/dist/js/luge.module.js +++ b/dist/js/luge.module.js @@ -1,2 +1,2 @@ -import e from"virtual-scroll";import t from"bowser/src/bowser.js";var i=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),n=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),s=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),n.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(i){null===i.cycle||i.cycle===e?i.callback(function(){return s.done(e,t)}):s.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),n.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),o=new(/*#__PURE__*/function(){function e(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,s.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,n.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),n.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,n.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),n.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),n.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),r=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,s.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(o.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,n={};for(var s in t){var o=t[s],r="lg-"+this.pluginSlug;"root"!==s&&(r+="-"+s),r=i.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof o?(c=o[0],u=o[1]):c=o,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),n[s]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=n),n},e}();function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}function a(e,t){return(a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function c(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(o,r){var l=i.toCamelCase(o.dataset.lgReveal);setTimeout(function(){(l||s)&&t.revealCallback(o,null!=l?l:s,"out"),t.setRevealClasses(o,n)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,n)}),this.toRevealIn=[],this.toRevealOut=[]}},n.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},n.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},n.add=function(e,t,n){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=n)},t}(r),g=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(c(i))},t.transition={add:i.add.bind(c(i))},i}l(t,e);var n=t.prototype;return n.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},n.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},n.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},n.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},n.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},n.pageInit=function(e){this.bindLinksEvent(),e()},n.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},n.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},n.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},n.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},n.pageOut=function(e){var t=this,n=document.querySelector("[data-lg-page]");if(n){var s=i.toCamelCase(n.getAttribute("data-lg-page")),o=!1;if("function"==typeof this.transitions.out[s]?o=this.transitions.out[s]:"function"==typeof n.onpageout?o=n.onpageout:"function"==typeof this.transitions.out.default&&(o=this.transitions.out.default),o)o(n,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},n.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var n=i.toCamelCase(t.getAttribute("data-lg-page")),s=!1;if(t.style.opacity="","function"==typeof this.transitions.in[n]?s=this.transitions.in[n]:"function"==typeof t.onpagein?s=t.onpagein:"function"==typeof this.transitions.in.default&&(s=this.transitions.in.default),s)s(t,e);else{var o=document.querySelector("[data-lg-loader]");if(o&&o.classList.contains("is-visible"))if(o.playerIn)o.playerIn.stop(),o.playerIn.renderer.svgElement.style.opacity=1,"reverse"===o.getAttribute("data-lg-loader-in")?o.playerIn.goToAndPlay(o.playerIn.totalFrames,!0):o.playerIn.play(),o.playerIn.addEventListener("complete",function(){o.playerIn.renderer.svgElement.style.opacity="",o.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?o.addEventListener("transitionend",e,{once:!0}):e(),o.classList.remove("is-visible")}else e()}}else e()},n.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},n.add=function(e,t,n){void 0===t&&(t="default"),this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=n)},t}(r),p=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return u(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?u(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=d.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},s.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},s.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},s.onVirtualScroll=function(e){var t=e.deltaY,n=e.originalEvent,s=!!n.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});n.ctrlKey||s||(this.targetScroll-=t,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},s.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},n}(r),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(r),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(r),y=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(c(i)),i.onScrollProgress=i.onScrollProgress.bind(c(i)),t.lottie={deferInit:i.deferInit.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(r),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(r),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(r),E=function(e){var i=document.documentElement,n=t.getParser(window.navigator.userAgent);i.classList.add("is-"+n.getPlatformType()),(n.is("mobile")||n.is("tablet"))&&i.classList.add("is-handheld"),n.is("Safari")&&(i.classList.add("is-safari"),i.classList.add("is-safari-"+n.getBrowserVersion())),e.browser=n},S=new(/*#__PURE__*/function(){function e(){this.elements=[],s.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[o.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),T=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],o.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),o.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),x=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),T.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("mouseMove",this.mouseHandler,this),n.on("resize",this.resizeHandler,this),n.on("update",this.updateHandler,this),n.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var n=e.getBoundingClientRect(),s={anchor:{x:n.left,y:n.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,s)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("resize",this.resizeHandler,this),n.on("scroll",this.scrollHandler,this),n.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),T.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),P=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:n.emit.bind(n),off:n.off.bind(n),on:n.on.bind(n),once:n.once.bind(n)},this.viewportobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.lifecycle={add:s.add.bind(s),refresh:s.cycle.bind(s,"refresh"),remove:s.remove.bind(s),debug:s.enableDebug.bind(s),_cycle:s.cycle.bind(s)},this.mouseobserver={add:x.add.bind(x),remove:x.remove.bind(x)},this.scrollobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.ticker={add:T.add.bind(T),nextTick:T.nextTick.bind(T),remove:T.remove.bind(T),tick:T.tick.bind(T)},this.settings=o.setSettings.bind(o)}var t,i,r=e.prototype;return r.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",s.cycle("load"),{once:!0}):this.ticker.nextTick(function(){s.cycle("load")},null)},r.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return o.settings}}])&&function(e,t){for(var i=0;i1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),n.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(i){null===i.cycle||i.cycle===e?i.callback(function(){return s.done(e,t)}):s.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),n.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),o=new(/*#__PURE__*/function(){function e(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,s.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,n.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),n.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,n.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),n.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),n.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),r=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,s.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(o.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,n={};for(var s in t){var o=t[s],r="lg-"+this.pluginSlug;"root"!==s&&(r+="-"+s),r=i.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof o?(c=o[0],u=o[1]):c=o,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),n[s]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=n),n},e}();function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}function a(e,t){return(a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function c(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(o,r){var l=i.toCamelCase(o.dataset.lgReveal);setTimeout(function(){(l||s)&&t.revealCallback(o,null!=l?l:s,"out"),t.setRevealClasses(o,n)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,n)}),this.toRevealIn=[],this.toRevealOut=[]}},n.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},n.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},n.add=function(e,t,n){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=n)},t}(r),g=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(c(i))},t.transition={add:i.add.bind(c(i))},i}l(t,e);var n=t.prototype;return n.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},n.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},n.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},n.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},n.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},n.pageInit=function(e){this.bindLinksEvent(),e()},n.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},n.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},n.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},n.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},n.pageOut=function(e){var t=this,n=document.querySelector("[data-lg-page]");if(n){var s=i.toCamelCase(n.getAttribute("data-lg-page")),o=!1;if("function"==typeof this.transitions.out[s]?o=this.transitions.out[s]:"function"==typeof n.onpageout?o=n.onpageout:"function"==typeof this.transitions.out.default&&(o=this.transitions.out.default),o)o(n,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},n.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var n=i.toCamelCase(t.getAttribute("data-lg-page")),s=!1;if(t.style.opacity="","function"==typeof this.transitions.in[n]?s=this.transitions.in[n]:"function"==typeof t.onpagein?s=t.onpagein:"function"==typeof this.transitions.in.default&&(s=this.transitions.in.default),s)s(t,e);else{var o=document.querySelector("[data-lg-loader]");if(o&&o.classList.contains("is-visible"))if(o.playerIn)o.playerIn.stop(),o.playerIn.renderer.svgElement.style.opacity=1,"reverse"===o.getAttribute("data-lg-loader-in")?o.playerIn.goToAndPlay(o.playerIn.totalFrames,!0):o.playerIn.play(),o.playerIn.addEventListener("complete",function(){o.playerIn.renderer.svgElement.style.opacity="",o.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?o.addEventListener("transitionend",e,{once:!0}):e(),o.classList.remove("is-visible")}else e()}}else e()},n.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},n.add=function(e,t,n){void 0===t&&(t="default"),this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=n)},t}(r),p=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return u(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?u(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=d.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},s.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},s.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},s.onVirtualScroll=function(e){var t=e.deltaY,n=e.originalEvent,s=!!n.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});n.ctrlKey||s||(this.targetScroll-=t,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},s.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},n}(r),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(r),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(r),y=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(c(i)),i.onScrollProgress=i.onScrollProgress.bind(c(i)),t.lottie={deferInit:i.deferInit.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(r),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(r),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(r),E=function(e){var i=document.documentElement,n=t.getParser(window.navigator.userAgent);i.classList.add("is-"+n.getPlatformType()),(n.is("mobile")||n.is("tablet"))&&i.classList.add("is-handheld"),n.is("Safari")&&(i.classList.add("is-safari"),i.classList.add("is-safari-"+n.getBrowserVersion())),e.browser=n},S=new(/*#__PURE__*/function(){function e(){this.elements=[],s.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[o.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),T=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],o.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),o.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),x=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),T.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("mouseMove",this.mouseHandler,this),n.on("resize",this.resizeHandler,this),n.on("update",this.updateHandler,this),n.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var n=e.getBoundingClientRect(),s={anchor:{x:n.left,y:n.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,s)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("resize",this.resizeHandler,this),n.on("scroll",this.scrollHandler,this),n.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),T.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),P=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:n.emit.bind(n),off:n.off.bind(n),on:n.on.bind(n),once:n.once.bind(n)},this.viewportobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.lifecycle={add:s.add.bind(s),refresh:s.cycle.bind(s,"refresh"),remove:s.remove.bind(s),debug:s.enableDebug.bind(s),_cycle:s.cycle.bind(s)},this.mouseobserver={add:x.add.bind(x),remove:x.remove.bind(x)},this.scrollobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.ticker={add:T.add.bind(T),nextTick:T.nextTick.bind(T),remove:T.remove.bind(T),tick:T.tick.bind(T)},this.settings=o.setSettings.bind(o)}var t,i,r=e.prototype;return r.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",s.cycle.bind(s,"load"),{once:!0}):this.ticker.nextTick(function(){s.cycle("load")},null)},r.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return o.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"luge.module.js","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/plugins/Browser.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get"],"mappings":"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"} \ No newline at end of file diff --git a/dist/luge.umd.js b/dist/luge.umd.js index 09c9415..6658f1d 100644 --- a/dist/luge.umd.js +++ b/dist/luge.umd.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("virtual-scroll"),require("bowser/src/bowser.js")):"function"==typeof define&&define.amd?define(["virtual-scroll","bowser/src/bowser.js"],t):t((e||self).virtualScroll,e.Bowser)}(this,function(e,t){function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/i(e),s=/*#__PURE__*/i(t),o=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),r=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),l=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),P=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),x=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),x.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),x.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=new(/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:x.add.bind(x),nextTick:x.nextTick.bind(x),remove:x.remove.bind(x),tick:x.tick.bind(x)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle("load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),P=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),x=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),x.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),x.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=new(/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:x.add.bind(x),nextTick:x.nextTick.bind(x),remove:x.remove.bind(x),tick:x.tick.bind(x)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import {\n Preloader,\n Reveal,\n Transition,\n ScrollAnimation,\n SmoothScroll,\n Cursor,\n Intersection,\n LottiePlayer,\n MouseAnimation,\n Parallax,\n Browser,\n Luge\n} from './luge'\n\nconst luge = new Luge()\n\nluge.addPlugin('preloader', Preloader)\nluge.addPlugin('reveal', Reveal)\nluge.addPlugin('transition', Transition)\nluge.addPlugin('scroll', ScrollAnimation)\nluge.addPlugin('smooth', SmoothScroll)\nluge.addPlugin('cursor', Cursor)\nluge.addPlugin('intersection', Intersection)\nluge.addPlugin('lottie', LottiePlayer)\nluge.addPlugin('mouse', MouseAnimation)\nluge.addPlugin('parallax', Parallax)\nluge.addPlugin('browser', Browser)\n\nluge.settings({\n cursor: {\n disabled: luge.browser.some(['tablet', 'mobile'])\n },\n smooth: {\n disabled: luge.browser.some(['tablet', 'mobile']) || luge.browser.satisfies({ safari: '<=12' })\n }\n})\n\nluge.init()\n\nwindow.luge = luge\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","plugins","readyState","addPlugin","get","Preloader","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","some","satisfies","safari"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"luge.umd.js","sources":["../src/js/luge/core/Helpers.js","../src/js/luge/core/Emitter.js","../src/js/luge/core/LifeCycle.js","../src/js/luge/core/Core.js","../src/js/luge/core/Plugin.js","../src/js/luge/plugins/Preloader.js","../src/js/luge/plugins/Reveal.js","../src/js/luge/plugins/Transition.js","../src/js/luge/plugins/ScrollAnimation.js","../src/js/luge/plugins/SmoothScroll.js","../src/js/luge/plugins/Cursor.js","../src/js/luge/plugins/Intersection.js","../src/js/luge/plugins/LottiePlayer.js","../src/js/luge/plugins/MouseAnimation.js","../src/js/luge/plugins/Parallax.js","../src/js/luge/core/ViewportObserver.js","../src/js/luge/core/Ticker.js","../src/js/luge/core/MouseObserver.js","../src/js/luge/core/ScrollObserver.js","../src/js/luge.umd.js","../src/js/luge/core/index.js","../src/js/luge/plugins/Browser.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import {\n Preloader,\n Reveal,\n Transition,\n ScrollAnimation,\n SmoothScroll,\n Cursor,\n Intersection,\n LottiePlayer,\n MouseAnimation,\n Parallax,\n Browser,\n Luge\n} from './luge'\n\nconst luge = new Luge()\n\nluge.addPlugin('preloader', Preloader)\nluge.addPlugin('reveal', Reveal)\nluge.addPlugin('transition', Transition)\nluge.addPlugin('scroll', ScrollAnimation)\nluge.addPlugin('smooth', SmoothScroll)\nluge.addPlugin('cursor', Cursor)\nluge.addPlugin('intersection', Intersection)\nluge.addPlugin('lottie', LottiePlayer)\nluge.addPlugin('mouse', MouseAnimation)\nluge.addPlugin('parallax', Parallax)\nluge.addPlugin('browser', Browser)\n\nluge.settings({\n cursor: {\n disabled: luge.browser.some(['tablet', 'mobile'])\n },\n smooth: {\n disabled: luge.browser.some(['tablet', 'mobile']) || luge.browser.satisfies({ safari: '<=12' })\n }\n})\n\nluge.init()\n\nwindow.luge = luge\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","plugins","readyState","addPlugin","get","Preloader","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","some","satisfies","safari"],"mappings":"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"} \ No newline at end of file diff --git a/src/js/luge/core/index.js b/src/js/luge/core/index.js index 856c456..b8c285f 100644 --- a/src/js/luge/core/index.js +++ b/src/js/luge/core/index.js @@ -54,7 +54,7 @@ class Luge { init() { // Site init on DOM ready if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', LifeCycle.cycle('load'), { once: true }) + document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true }) } else { this.ticker.nextTick(() => { LifeCycle.cycle('load') From 39db2c9fa6a5bf2a425801fc81387e5f739e6b5b Mon Sep 17 00:00:00 2001 From: Sajjad Hashemian Date: Tue, 3 Oct 2023 11:21:21 +0330 Subject: [PATCH 03/11] use self luge --- dist/js/luge.cjs | 2 +- dist/js/luge.cjs.map | 2 +- dist/js/luge.modern.js | 2 +- dist/js/luge.modern.js.map | 2 +- dist/js/luge.module.js | 2 +- dist/js/luge.module.js.map | 2 +- dist/luge.umd.js | 2 +- dist/luge.umd.js.map | 2 +- src/js/luge/plugins/Parallax.js | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dist/js/luge.cjs b/dist/js/luge.cjs index 806bd35..8cb9e0e 100644 --- a/dist/js/luge.cjs +++ b/dist/js/luge.cjs @@ -1,2 +1,2 @@ -var e=require("virtual-scroll"),t=require("bowser/src/bowser.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/i(e),s=/*#__PURE__*/i(t),o=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),r=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),l=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),x=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),k=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),P=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),k.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),k.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:P.add.bind(P),remove:P.remove.bind(P)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:k.add.bind(k),nextTick:k.nextTick.bind(k),remove:k.remove.bind(k),tick:k.tick.bind(k)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),x=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(e.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),k=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),P=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),k.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;k.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),k.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),k.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:P.add.bind(P),remove:P.remove.bind(P)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:k.add.bind(k),nextTick:k.nextTick.bind(k),remove:k.remove.bind(k),tick:k.tick.bind(k)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"luge.cjs","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js","../../src/js/luge/plugins/Browser.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (this.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/luge.modern.js b/dist/js/luge.modern.js index 97db26c..cbe4933 100644 --- a/dist/js/luge.modern.js +++ b/dist/js/luge.modern.js @@ -1,2 +1,2 @@ -import e from"virtual-scroll";import t from"bowser/src/bowser.js";class s{static isArray(e){return e&&"object"==typeof e&&Array.isArray(e)}static isObject(e){return e&&"object"==typeof e&&!Array.isArray(e)}static isString(e){return e&&"string"==typeof e}static mergeDeep(e,t){const i=Object.assign({},e);return s.isObject(e)&&s.isObject(t)&&Object.keys(t).forEach(o=>{s.isObject(t[o])?o in e?i[o]=s.isObject(e[o])&&s.isObject(t[o])?s.mergeDeep(e[o],t[o]):t[o]:Object.assign(i,{[o]:t[o]}):Object.assign(i,{[o]:t[o]})}),i}static toCamelCase(e){return s.isString(e)?e.replace(/(?:^\w|[A-Z]|\b\w)/g,(e,t)=>0===t?e.toLowerCase():e.toUpperCase()).replace(/\W+/g,""):e}static toUpperCamelCase(e){return s.isString(e)?(e=s.toCamelCase(e)).charAt(0).toUpperCase()+e.slice(1):e}static isInPage(e){return e!==document.body&&document.body.contains(e)}static deepFreeze(e){return Object.keys(e).forEach(t=>{"object"==typeof e[t]&&s.deepFreeze(e[t])}),Object.freeze(e)}static clamp(e,t,s){return Math.min(s,Math.max(t,e))}}var i=s,o=new class{constructor(){this.events=[]}on(e,t,s,i=!1){(this.events[e]||(this.events[e]=[])).push({cb:t,context:s,once:i})}once(e,t,s){this.on(e,t,s,!0)}emit(e){const t=this,s=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach((i,o)=>{i.cb.apply(i.context,s),i.once&&delete t.events[e][o]})}off(e,t){const s=this;this.events[e]&&this.events[e].forEach((i,o)=>{i.cb===t&&delete s.events[e][o]})}},l=new class{constructor(){this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(e=>{this.events[e]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}cycle(e){if(this.cycles[e]){this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e);for(const e in this.events)this.events[e].done=0;this.proceed(e)}}proceed(e){const t=this.cycles[e].events,s=this.cycles[e].current;if(s{this.do(e,t)}):this.do(e,i)}else this.debug&&console.log(e+" cycle ended")}next(e){const t=this,s=this.cycles[e].events,i=this.cycles[e].current;if(i1&&n.forEach(e=>{(0===t.events[e].done||t.events[e].done{o.callback===t&&o.cycle===s&&delete i.events[e].callbacks[l]})}do(e,t){this.events[t].done=0,this.events[t].callbacks.length>0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),o.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort((e,t)=>e.position-t.position).forEach(s=>{null===s.cycle||s.cycle===e?s.callback(()=>this.done(e,t)):this.done(e,t)})):this.done(e,t)}done(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),o.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)}enableDebug(e=!0){this.debug=e}},n=new class{constructor(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}setSettings(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))}siteInit(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()}bindEvents(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})}mouseHandler(e){const t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,o.emit("mouseMove",e)}resizeThrottle(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)}resizeHandler(){this.setCSSProperties(),o.emit("resize")}setCSSProperties(){const e=window.innerWidth;this.windowWidth!==e&&(this.windowWidth=e,this.clientWidth=document.body.clientWidth);const t=window.innerHeight;this.windowHeight!==t&&(this.windowHeight=t,this.clientHeight=document.body.clientHeight),requestAnimationFrame(()=>{document.documentElement.style.setProperty("--vw",.01*this.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*this.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*this.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*this.clientHeight+"px")})}scrollHandler(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,o.emit("scroll")}scrollStart(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),o.emit("scrollStart")}scrollEnd(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),o.emit("scrollEnd")}showCredits(){if(this.settings.credits.show){const e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,e+"font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}}};class r{constructor(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}beforeInit(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()}init(){this.setAttributes()}disabled(){return!!(n.settings[this.pluginSlug]||{}).disabled}setAttributes(){this.pluginAttributes={}}getAttributes(e){const t=this.pluginAttributes,s={};for(const o in t){const l=t[o];let n="lg-"+this.pluginSlug;"root"!==o&&(n+="-"+o),n=i.toCamelCase(n);const r=e.dataset[n];let a,d,c;"object"==typeof l?(a=l[0],c=l[1]):a=l,d=void 0===r&&void 0!==c?a(c):(void 0!==r||a!==Boolean)&&(void 0!==r?a===Boolean?"false"!==r:a(r):void 0),s[o]=d}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=s),s}}class a extends r{constructor(e){super("preloader"),this.luge=e,this.intro=!1,this.playerIn=!1,this.startTime=Date.now(),this.doneLoad=null,e.preloader={add:this.add.bind(this)}}init(){super.init(),this.el=document.querySelector("[data-lg-preloader]"),this.el&&(this.attributes=this.getAttributes(this.el),this.el.classList.add("lg-preloader","lg-preloader--"+this.attributes.root),this.initLottie(),this.luge.lifecycle.add("siteIn",this.siteIn.bind(this))),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this))}setAttributes(){this.pluginAttributes={root:[String,""],duration:[Number,this.luge._settings.preloader.duration],in:String,reverse:Boolean}}pageLoad(e){this.attributes&&"lottie"===this.attributes.root&&"object"==typeof lottie?this.doneLoad=e:e()}siteIn(e){const t=(Date.now()-this.startTime)/1e3,s=this.attributes.duration-t;if(s<=0){const t=this.clear.bind(this,e);if(this.playerIn)this.playerIn.play(),this.playerIn.addEventListener("complete",t,{once:!0});else if("function"==typeof this.intro)this.intro(e,this.remove.bind(this));else{const e=window.getComputedStyle(this.el).getPropertyValue("transition-duration");""!==e&&"0s"!==e?(this.el.addEventListener("transitionend",t,{once:!0}),this.el.classList.add("is-hidden")):t()}}else setTimeout(this.siteIn.bind(this,e),1e3*s)}clear(e){this.playerIn&&this.playerIn.destroy(),this.remove(),e()}remove(e){this.el.parentNode.removeChild(this.el),this.el=null}add(e){this.intro=e}initLottie(){const e=this;if("lottie"===this.attributes.root&&"object"==typeof lottie){const t=this.attributes.in;let s=!1;t&&(s=lottie.loadAnimation({container:this.el,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}}),this.attributes.reverse&&s.setDirection(-1)),s.addEventListener("DOMLoaded",()=>{e.attributes.reverse&&s.goToAndStop(s.totalFrames-1,!0),e.el.setAttribute("style",""),"function"==typeof e.doneLoad&&(e.doneLoad(),e.doneLoad=null)},{once:!0}),this.playerIn=s}}}class d extends r{constructor(e){super("reveal"),this.luge=e,this.elements=[],this.toRevealIn=[],this.toRevealOut=[],this.reveals={in:{},out:{}},this.canReveal=!1,this.onScrollProgress=this.onScrollProgress.bind(this),e.reveal={add:this.add.bind(this)}}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),11),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this)),this.bindEvents()}setAttributes(){super.setAttributes(),this.pluginAttributes={root:String,stagger:String,manual:[Boolean,!1],multiple:Boolean,delay:[Number,0]}}getAttributes(e){const t=super.getAttributes(e);return void 0!==t.stagger&&""===t.stagger?t.stagger=this.luge._settings.reveal.stagger:void 0===t.stagger&&(t.stagger=!1),t}bindEvents(){this.luge.emitter.on("resize",this.resizeHandler,this),this.luge.emitter.on("scroll",this.scrollHandler,this),this.luge.emitter.on("update",this.updateHandler,this)}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-reveal]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);if(!t.stagger&&null!==e.closest("[data-lg-reveal-stagger]"))return;const s=t.root;e.luge.reveal.name=i.toCamelCase(s),t.manual?(e.luge.reveal.in=()=>{this.revealCallback(e,e.luge.reveal.name,"in"),this.setRevealClasses(e,"is-in")},e.luge.reveal.out=()=>{this.revealCallback(e,e.luge.reveal.name,"out"),this.setRevealClasses(e,"is-out")}):(this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress)),e.luge.reveal.delay=1e3*t.delay,t.stagger?Array.from(e.children).forEach(e=>{const t=e.dataset.lgReveal;e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),(t||s)&&e.classList.add("lg-reveal--"+(null!=t?t:s)),e.dataset.lgRevealChild="",(e.luge||(e.luge={}))&&(e.luge.reveal={isRevealed:!1})}):(e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),s&&e.classList.add("lg-reveal--"+s)),this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.canReveal=!1,this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){const t=e.target,s=this.luge._settings.reveal.threshold;t.scrollProgress>=s&&t.scrollProgress<=1-s&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-s&&t.scrollEnd{e.scrollStart<0&&(this.toRevealIn.includes(e)||this.toRevealIn.push(e))}),this.revealElements(),e()}resizeHandler(){this.revealElements()}scrollHandler(){this.revealElements()}updateHandler(){this.addElements(),this.revealElements()}revealElements(){const e=this;if(this.canReveal){let t=0;this.toRevealIn.forEach(s=>{const o=i.toCamelCase(s.luge.reveal.root);t+=s.luge.reveal.delay,setTimeout(function(){e.revealCallback(s,o,"in"),s.luge.reveal.stagger?Array.from(s.children).forEach((t,l)=>{const n=i.toCamelCase(t.dataset.lgReveal);setTimeout(()=>{(n||o)&&e.revealCallback(t,null!=n?n:o,"in"),e.setRevealClasses(t,"is-in")},l*s.luge.reveal.stagger*1e3)}):e.setRevealClasses(s,"is-in")},t),t+=1e3*this.luge._settings.reveal.stagger,s.luge.reveal.multiple||e.removeElement(s)}),this.toRevealOut.forEach(t=>{const s=i.toCamelCase(t.luge.reveal.root);void 0!==t.luge.reveal.isRevealed&&e.revealCallback(t,s,"out");let o="";o=t.scrollProgress>.5?"is-out is-out-top":"is-out is-out-bottom",t.luge.reveal.stagger?Array.from(t.children).forEach((l,n)=>{const r=i.toCamelCase(l.dataset.lgReveal);setTimeout(()=>{(r||s)&&e.revealCallback(l,null!=r?r:s,"out"),e.setRevealClasses(l,o)},n*t.luge.reveal.stagger*1e3)}):e.setRevealClasses(t,o)}),this.toRevealIn=[],this.toRevealOut=[]}}setRevealClasses(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(t=>{e.classList.add(t)})}revealCallback(e,t,s){e.dispatchEvent(new CustomEvent("reveal"+s)),e.luge.reveal.isRevealed="in"===s,"function"==typeof this.reveals[s][t]?this.reveals[s][t](e):"function"==typeof e["onreveal"+s]&&e["onreveal"+s]()}add(e,t,s){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=s)}}class c extends r{constructor(e){super("transition"),this.luge=e,this.url=window.location.href,this.pathname=window.location.pathname,this.pageFetched=null,this.currentPage=null,this.reload=this.luge._settings.transition.reload,this.prevScrollTop=0,this.newScrollTop=0,this.transitions={in:{},out:{}},this.listeners={linkHandler:this.linkHandler.bind(this)},e.transition={add:this.add.bind(this)}}init(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")}bindLinksEvent(){document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(e=>{e.addEventListener("click",this.listeners.linkHandler)})}unbindLinksEvent(){document.querySelectorAll("a").forEach(e=>{e.removeEventListener("click",this.listeners.linkHandler)})}linkHandler(e){const t=e.currentTarget,s=t.getAttribute("href");if(s&&0!==s.indexOf("#")&&0!==s.indexOf("tel")&&0!==s.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===s.indexOf(window.location.origin)||0===s.indexOf("/")||-1===s.indexOf("/"))){if(e.preventDefault(),window.location.href===s)return;this.navigateTo(s),history.pushState(null,null,this.url)}}navigateTo(e){if(this.url=e,this.reload){const t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",t=>{window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")}pageInit(e){this.bindLinksEvent(),e()}initLoader(){const e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(()=>{e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){const t=e.getAttribute("data-lg-loader-out");let s=!1,i=e.getAttribute("data-lg-loader-in"),o=!1;t&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===i&&(i=t),i&&(o=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:i,rendererSettings:{preserveAspectRatio:"none"}}),i===t&&o.setDirection(-1)),e.playerOut=s,e.playerIn=o}}pageFetch(e){const t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(s){t.pageFetched=s,e()})}pageCreate(e){const t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),s=t.querySelector("[data-lg-page]");if(s){{this.currentPage.insertAdjacentElement("beforebegin",s),s.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{document.querySelector("head title").insertAdjacentElement("afterend",e)});const e=document.querySelector("head title"),i=t.querySelector("head title");e&&i&&(e.innerText=i.innerText)}window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url}pageKill(e){const t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()}pageOut(e){const t=this,s=document.querySelector("[data-lg-page]");if(s){const o=i.toCamelCase(s.getAttribute("data-lg-page"));let l=!1;if("function"==typeof this.transitions.out[o]?l=this.transitions.out[o]:"function"==typeof s.onpageout?l=s.onpageout:"function"==typeof this.transitions.out.default&&(l=this.transitions.out.default),l)l(s,e);else{const s=document.querySelector("[data-lg-loader]");if(s){if(s.playerOut)s.playerOut.stop(),s.playerOut.renderer.svgElement.style.opacity=1,s.playerOut.play(),s.playerOut.addEventListener("complete",()=>{t.reload||(s.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{const t=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==t&&"0s"!==t?s.addEventListener("transitionend",e,{once:!0}):e()}s.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)}pageIn(e){const t=document.querySelector("[data-lg-page]");if(t){const s=i.toCamelCase(t.getAttribute("data-lg-page"));let o=!1;if(t.style.opacity="","function"==typeof this.transitions.in[s]?o=this.transitions.in[s]:"function"==typeof t.onpagein?o=t.onpagein:"function"==typeof this.transitions.in.default&&(o=this.transitions.in.default),o)o(t,e);else{const t=document.querySelector("[data-lg-loader]");if(t&&t.classList.contains("is-visible"))if(t.playerIn)t.playerIn.stop(),t.playerIn.renderer.svgElement.style.opacity=1,"reverse"===t.getAttribute("data-lg-loader-in")?t.playerIn.goToAndPlay(t.playerIn.totalFrames,!0):t.playerIn.play(),t.playerIn.addEventListener("complete",()=>{t.playerIn.renderer.svgElement.style.opacity="",t.classList.remove("is-visible"),e()},{once:!0});else{const s=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==s&&"0s"!==s?t.addEventListener("transitionend",e,{once:!0}):e(),t.classList.remove("is-visible")}else e()}}else e()}historyStateChanged(){let e="";e=0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url),e.pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(()=>{this.newScrollTop=window.scrollY,window.scroll({top:this.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))}add(e,t="default",s){this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=s)}}class h extends r{constructor(e){super("scroll"),this.luge=e,this.elements=[],this.allowedProperties=["opacity","background-x","background-y"],this.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],this.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);const s={};s.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,s.yoyo=t.yoyo,s.inertia=t.inertia;let i=!1;if(void 0!==t.animate?i=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(i=this.presets[t.root]),i){const e={};for(const t in i)if(this.allowedProperties.includes(t)||this.transformProperties.includes(t)){const s=i[t];let o=String(s[0]),l=String(s[1]),n=o.match(/\d+([a-zA-Z%]+)/m);n?n=n[1]:0===t.indexOf("rotate")&&(n="deg"),o=Number(o.replace(n,"")),l=Number(l.replace(n,""));let r=t;"background-x"===t?r="background-position-x":"background-y"===t&&(r="background-position-y"),e[r]={from:o,to:l,current:o,unit:n}}s.properties=e}e.luge.scroll.animation=s,this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){e.target.luge.scroll.animation.atDest=!1}tick(){for(const e of this.elements){if(e.luge.scroll.animation.atDest)continue;let t=e.scrollProgress;if(e.luge.scroll.yoyo&&(t=1-Math.abs(1-2*t)),e.luge.scroll.animation.smoothProgress+=(t-e.luge.scroll.animation.smoothProgress)*(1-e.luge.scroll.inertia),e.luge.scroll.animation.properties){const t={};for(const[s,i]of Object.entries(e.luge.scroll.animation.properties))i.current=i.from+(i.to-i.from)*e.luge.scroll.animation.smoothProgress,["x","y","z"].includes(s)?(t.translate3d||(t.translate3d={}))&&(t.translate3d[s]=i.current+i.unit):t[s]=i.current+i.unit;const s=[];for(const[e,i]of Object.entries(t))if(this.transformProperties.includes(e)){if("object"==typeof i)if("translate3d"===e){const e=Object.assign({x:0,y:0,z:0},i);i.string=e.x+", "+e.y+", "+e.z}else i.string=Object.values(i).join(", ");s.push(e+"("+("object"!=typeof i?i:i.string)+")")}const i={},o=[];s.length>0&&(i.transform=s.join(" "),o.push("transform"));for(const[e,s]of Object.entries(t))this.transformProperties.includes(e)||(i[e]=s,o.push(e));for(const[t,s]of Object.entries(i))e.style.setProperty(t,s);e.style.setProperty("will-change",o.join(", "))}else{const t=Math.round(1e3*(e.scrollProgress-e.luge.scroll.animation.smoothProgress))/1e3;e.style.setProperty("--progress",e.luge.scroll.animation.smoothProgress),e.style.setProperty("--abs-diff",Math.abs(t)),e.style.setProperty("--diff",t)}Math.abs(t-e.luge.scroll.animation.smoothProgress)<1e-4&&(e.luge.scroll.animation.atDest=!0)}}}class u extends r{constructor(){super("smooth"),window.hasSmoothScroll=!1,window.isSmoothScrolling=!1}init(){if(super.init(),this.element=document.documentElement,this.hasSmooth=this.element.hasAttribute("data-lg-smooth"),this.hasSmooth){var t,s;window.hasSmoothScroll=!0,this.smoothScroll=window.scrollTop,this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,document.documentElement.classList.add("has-smooth-scroll");const i=(null==(t=navigator)||null==(t=t.userAgentData)?void 0:t.platform)||(null==(s=navigator)?void 0:s.platform)||"unknown";this.virtualScroll=new e({el:this.element,firefoxMultiplier:50,mouseMultiplier:i.indexOf("Win")>-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}}bindEvents(){this.luge.emitter.on("scroll",this.onScroll,this)}onScroll(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)}onVirtualScroll({deltaY:e,originalEvent:t}){const s=!!t.composedPath().find(e=>null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent"));t.ctrlKey||s||(this.targetScroll-=e,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)}tick(){const e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;const t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)}}class g extends r{constructor(e){super("cursor"),this.luge=e,this.cursors=[],this.pointers=[],this.trails=[],this.hoverTags=["a","button","input"]}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}}bindEvents(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})}pageInit(e){const t=this,s=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");s.length>0&&s.forEach(e=>{const s=this.getAttributes(e);s.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(e=>{e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.classList.add("lg-cursor-pointer"),t.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(e=>{const i=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=document.createElementNS("http://www.w3.org/2000/svg","path");i.appendChild(o),e.appendChild(i),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:o}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):s.length,e.classList.add("lg-cursor-trail"),t.trails.push(e)}),e.classList.add("lg-cursor"),this.cursors.push(e)}),e()}hoverHandler(e){const t=e.target,s=t.tagName.toLowerCase(),i=t.getAttribute("data-lg-hover");let o=null;(this.hoverTags.includes(s)||null!==i)&&(o="mouseenter"===e.type),null!==o&&this.cursors.forEach(e=>{e.classList.toggle("lg-cursor--hover",o),null!==i&&""!==i&&e.classList.toggle("lg-cursor--hover--"+i,o)})}tick(e){this.pointers.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+s.x+"px, "+s.y+"px, 0)"}),this.trails.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia;const i=e.luge.cursor.points;i.push({x:s.x,y:s.y}),i.length>e.luge.cursor.length&&i.shift();let o="",l=0;const n=(e,t)=>{const s=t.x-e.x,i=t.y-e.y;return{length:Math.sqrt(Math.pow(s,2)+Math.pow(i,2)),angle:Math.atan2(i,s)}},r=(e,t,s,i)=>{const o=n(t||e,s||e);l+=o.length;const r=o.angle+(i?Math.PI:0),a=.2*o.length;return[e.x+Math.cos(r)*a,e.y+Math.sin(r)*a]};o=((e,t)=>`${e.reduce((e,t,s,i)=>0===s?`M ${t.x},${t.y}`:`${e} ${((e,t,s)=>{const[i,o]=r(s[t-1],s[t-2],e),[l,n]=r(e,s[t-1],s[t+1],!0);return`C ${i},${o} ${l},${n} ${e.x},${e.y}`})(t,s,i)}`,"")}`)(i),e.luge.cursor.path.setAttribute("d",o),e.style.setProperty("--length",l)}})}}class p extends r{constructor(e){super("intersection"),this.luge=e,this.listeners={onViewportIntersect:this.onViewportIntersect.bind(this)}}init(){super.init(),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,class:String}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))}removeElement(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onViewportIntersect(e){const t=e.target,s=t.luge.viewport.position,i=!!t.luge.intersection.class&&t.luge.intersection.class.split(" ");t.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(t.classList.add("is-in"),i&&document.documentElement.classList.add(...i)):(i&&document.documentElement.classList.remove(...i),t.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))}}class m extends r{constructor(e){super("lottie"),this.luge=e,this.elements=[],this.doneLoad=null,this.onViewportIntersect=this.onViewportIntersect.bind(this),this.onScrollProgress=this.onScrollProgress.bind(this),e.lottie={deferInit:this.deferInit.bind(this)}}init(){super.init(),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()}deferInit(){"object"==typeof lottie&&(this.pageInit(()=>{}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())}setAttributes(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements(),this.reveal(()=>{})}pageLoad(e){let t=!1;this.elements.length>0&&this.elements.forEach(e=>{e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()}pageInit(e){this.addElements(),e()}addElements(){const e=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(t=>{if(!t.player){const s=this.getAttributes(t);this.luge.scrollobserver.add(t),s.lazy||(e.initPlayer(t),t.addEventListener("revealin",e.play)),t.addEventListener("viewportintersect",e.onViewportIntersect)}})}pageKill(e){const t=this;let s=[];const i=document.querySelector("[data-lg-page] + [data-lg-page]");s=i?i.querySelectorAll("[data-lg-lottie]"):this.elements,s.forEach(e=>{e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()}reveal(e){this.toAutoplay.forEach(e=>{"in"===e.viewportPosition&&e.play()}),e()}onViewportIntersect(e){const t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)}initLazy(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",()=>{e.play()},{once:!0})}initPlayer(e){const t=this;this.toLoad++;const s=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:s.renderer,loop:s.loop&&!s.reverse,autoplay:!1,path:s.root}),void 0!==s.subframe&&e.player.setSubframe(s.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),s.autoplay&&this.toAutoplay.push(e),s.required&&this.requireds++,s.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):s.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){const i=Math.round(e.player.currentFrame);1===e.player.playDirection?i===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(s.reverse?()=>{e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:()=>{e.player.goToAndPlay(s.loopFrame,!0)},this)):i===s.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(()=>{e.player.setDirection(1),e.player.goToAndPlay(s.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",()=>{e.classList.add("is-loaded"),t.playerLoaded(s.required)},{once:!0})}setPlayerStateClasses(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")}playerLoaded(e=!1){this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(()=>{this.luge.emitter.emit("resize")})}play(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))}pause(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))}stop(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))}onScrollProgress(e){const t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)}}class v extends r{constructor(e){super("mouse"),this.luge=e,this.elements=[],this.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))}removeElement(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}getMouseMovement(){const e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,s=Math.hypot(e,t);if(window.mouseSpeed+=.5*(s-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),s>1){const s=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=s,window.mouseDirection=s>=45&&s<135?"down":s>=135&&s<225?"left":s>=225&&s<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)}tick(){this.elements.forEach(e=>{const t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);const s=Math.round(1e3*(t.x-t.smoothX))/1e3,i=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(s)),e.style.setProperty("--diff-x",s),e.style.setProperty("--abs-diff-y",Math.abs(i)),e.style.setProperty("--diff-y",i)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})}}class b extends r{constructor(e){super("parallax"),this.luge=e,this.elements=[],this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.amplitude){const e=t.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.amplitude=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.amplitude)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}addElements(){document.querySelectorAll("[data-lg-parallax]").forEach(e=>{const t=this.getAttributes(e).disable;let s=!0;const i=(window.luge.browser||{}).is;t&&i&&("desktop"===t&&i("desktop")||"handheld"===t&&!i("desktop")||"mobile"===t&&i("mobile")||"tablet"===t&&i("tablet"))&&(s=!1),s&&this.addElement(e)})}addElement(e){this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(()=>{e.addEventListener("scrollprogress",this.onScrollProgress),this.moveElement(e)}))}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}onScrollProgress(e){this.moveElement(e.target)}moveElement(e){let t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2}tick(){this.elements.forEach(e=>{e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})}}class y{constructor(e){const s=document.documentElement,i=t.getParser(window.navigator.userAgent);s.classList.add("is-"+i.getPlatformType()),(i.is("mobile")||i.is("tablet"))&&s.classList.add("is-handheld"),i.is("Safari")&&(s.classList.add("is-safari"),s.classList.add("is-safari-"+i.getBrowserVersion())),e.browser=i}}var w=new class{constructor(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}init(e){this.createObserver(),e()}createObserver(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[n.settings.intersection.threshold]})}intersectionCallback(e){e.forEach(e=>{const t=e.target;let s="in";e.isIntersecting||(s=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==s&&(t.luge.viewport.position=s,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===s?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+s))))})}add(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))}remove(e){this.observer.unobserve(e)}},f=new class{constructor(){this.callbacks=[],this.onceCallbacks=[],n.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}add(e,t){let s=!1;this.callbacks.forEach(i=>{i.cb===e&&i.context===t&&(s=!0)}),s||this.callbacks.push({cb:e,context:t})}remove(e,t){const s=this;this.callbacks.forEach((i,o)=>{i.cb===e&&i.context===t&&delete s.callbacks[o]})}nextTick(e,t){this.onceCallbacks.push({cb:e,context:t})}_tick(e){const t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),n.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))}tick(e){const t=this;this.callbacks.forEach(t=>{t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach((s,i)=>{s.cb.apply(s.context,[e]),delete t.onceCallbacks[i]})}},E=new class{constructor(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),f.add(this.tick,this),this.bindEvents()}bindEvents(){o.on("mouseMove",this.mouseHandler,this),o.on("resize",this.resizeHandler,this),o.on("update",this.updateHandler,this),o.on("scroll",this.scrollHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],e()}init(e){this.getBoundingThrottle(),e()}resizeHandler(){this.getBoundingThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle()},this)}scrollHandler(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)}mouseHandler(){const e=this;this.elements.forEach(t=>{e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop}getBoundingThrottle(){this.elementsToBound=this.elements,f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e),this.setElementPosition(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect(),o={anchor:{x:s.left,y:s.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,o)),e.setAttribute("style",t)}setElementPosition(e){if(e.luge&&e.luge.anchor){const t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}}add(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)}tick(){const e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(t=>{e.setElementPosition(t)})}},S=new class{constructor(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}bindEvents(){o.on("resize",this.resizeHandler,this),o.on("scroll",this.scrollHandler,this),o.on("update",this.updateHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()}init(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()}resizeHandler(){this.getBoundingThrottle(),this.checkElementsThrottle()}scrollHandler(){this.checkElementsThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle(),this.checkElementsThrottle()},this)}setMaxScrollTop(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight}getBoundingThrottle(){this.setMaxScrollTop(),this.elements.forEach(e=>{this.elementsToBound.includes(e)||(e.scrollProgress=0,this.elementsToBound.push(e))}),f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect();e.scrollStart=s.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)}checkElementsThrottle(){this.elements.forEach(e=>{this.elementsToCheck.includes(e)||this.elementsToCheck.push(e)}),f.nextTick(this.checkElements.bind(this))}checkElements(){this.elementsToCheck.forEach(e=>{this.checkElement(e)}),this.elementsToCheck=[]}checkElement(e){const t=window.unifiedScrollTop;let s="",i=0;i=e.scrollStart<0?Math.min(Math.max(t/e.scrollEnd,0),1):Math.min(Math.max((t-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(i)&&(i=0),s=i<=0&&e.scrollStart>0?"under":i>=1&&e.scrollEnd0&&i<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))}add(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)}},x=class{constructor(){this.plugins={},this.emitter={emit:o.emit.bind(o),off:o.off.bind(o),on:o.on.bind(o),once:o.once.bind(o)},this.viewportobserver={add:w.add.bind(w),remove:w.remove.bind(w)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:E.add.bind(E),remove:E.remove.bind(E)},this.scrollobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.ticker={add:f.add.bind(f),nextTick:f.nextTick.bind(f),remove:f.remove.bind(f),tick:f.tick.bind(f)},this.settings=n.setSettings.bind(n)}init(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(()=>{l.cycle("load")},null)}addPlugin(e,t){this.plugins[e]=new t(this)}get _settings(){return n.settings}};export{y as Browser,g as Cursor,p as Intersection,m as LottiePlayer,x as Luge,v as MouseAnimation,b as Parallax,r as Plugin,a as Preloader,d as Reveal,h as ScrollAnimation,u as SmoothScroll,c as Transition}; +import e from"virtual-scroll";import t from"bowser/src/bowser.js";class s{static isArray(e){return e&&"object"==typeof e&&Array.isArray(e)}static isObject(e){return e&&"object"==typeof e&&!Array.isArray(e)}static isString(e){return e&&"string"==typeof e}static mergeDeep(e,t){const i=Object.assign({},e);return s.isObject(e)&&s.isObject(t)&&Object.keys(t).forEach(o=>{s.isObject(t[o])?o in e?i[o]=s.isObject(e[o])&&s.isObject(t[o])?s.mergeDeep(e[o],t[o]):t[o]:Object.assign(i,{[o]:t[o]}):Object.assign(i,{[o]:t[o]})}),i}static toCamelCase(e){return s.isString(e)?e.replace(/(?:^\w|[A-Z]|\b\w)/g,(e,t)=>0===t?e.toLowerCase():e.toUpperCase()).replace(/\W+/g,""):e}static toUpperCamelCase(e){return s.isString(e)?(e=s.toCamelCase(e)).charAt(0).toUpperCase()+e.slice(1):e}static isInPage(e){return e!==document.body&&document.body.contains(e)}static deepFreeze(e){return Object.keys(e).forEach(t=>{"object"==typeof e[t]&&s.deepFreeze(e[t])}),Object.freeze(e)}static clamp(e,t,s){return Math.min(s,Math.max(t,e))}}var i=s,o=new class{constructor(){this.events=[]}on(e,t,s,i=!1){(this.events[e]||(this.events[e]=[])).push({cb:t,context:s,once:i})}once(e,t,s){this.on(e,t,s,!0)}emit(e){const t=this,s=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach((i,o)=>{i.cb.apply(i.context,s),i.once&&delete t.events[e][o]})}off(e,t){const s=this;this.events[e]&&this.events[e].forEach((i,o)=>{i.cb===t&&delete s.events[e][o]})}},l=new class{constructor(){this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(e=>{this.events[e]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}cycle(e){if(this.cycles[e]){this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e);for(const e in this.events)this.events[e].done=0;this.proceed(e)}}proceed(e){const t=this.cycles[e].events,s=this.cycles[e].current;if(s{this.do(e,t)}):this.do(e,i)}else this.debug&&console.log(e+" cycle ended")}next(e){const t=this,s=this.cycles[e].events,i=this.cycles[e].current;if(i1&&n.forEach(e=>{(0===t.events[e].done||t.events[e].done{o.callback===t&&o.cycle===s&&delete i.events[e].callbacks[l]})}do(e,t){this.events[t].done=0,this.events[t].callbacks.length>0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),o.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort((e,t)=>e.position-t.position).forEach(s=>{null===s.cycle||s.cycle===e?s.callback(()=>this.done(e,t)):this.done(e,t)})):this.done(e,t)}done(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),o.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)}enableDebug(e=!0){this.debug=e}},n=new class{constructor(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}setSettings(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))}siteInit(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()}bindEvents(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})}mouseHandler(e){const t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,o.emit("mouseMove",e)}resizeThrottle(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)}resizeHandler(){this.setCSSProperties(),o.emit("resize")}setCSSProperties(){const e=window.innerWidth;this.windowWidth!==e&&(this.windowWidth=e,this.clientWidth=document.body.clientWidth);const t=window.innerHeight;this.windowHeight!==t&&(this.windowHeight=t,this.clientHeight=document.body.clientHeight),requestAnimationFrame(()=>{document.documentElement.style.setProperty("--vw",.01*this.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*this.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*this.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*this.clientHeight+"px")})}scrollHandler(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,o.emit("scroll")}scrollStart(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),o.emit("scrollStart")}scrollEnd(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),o.emit("scrollEnd")}showCredits(){if(this.settings.credits.show){const e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,e+"font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}}};class r{constructor(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}beforeInit(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()}init(){this.setAttributes()}disabled(){return!!(n.settings[this.pluginSlug]||{}).disabled}setAttributes(){this.pluginAttributes={}}getAttributes(e){const t=this.pluginAttributes,s={};for(const o in t){const l=t[o];let n="lg-"+this.pluginSlug;"root"!==o&&(n+="-"+o),n=i.toCamelCase(n);const r=e.dataset[n];let a,d,c;"object"==typeof l?(a=l[0],c=l[1]):a=l,d=void 0===r&&void 0!==c?a(c):(void 0!==r||a!==Boolean)&&(void 0!==r?a===Boolean?"false"!==r:a(r):void 0),s[o]=d}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=s),s}}class a extends r{constructor(e){super("preloader"),this.luge=e,this.intro=!1,this.playerIn=!1,this.startTime=Date.now(),this.doneLoad=null,e.preloader={add:this.add.bind(this)}}init(){super.init(),this.el=document.querySelector("[data-lg-preloader]"),this.el&&(this.attributes=this.getAttributes(this.el),this.el.classList.add("lg-preloader","lg-preloader--"+this.attributes.root),this.initLottie(),this.luge.lifecycle.add("siteIn",this.siteIn.bind(this))),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this))}setAttributes(){this.pluginAttributes={root:[String,""],duration:[Number,this.luge._settings.preloader.duration],in:String,reverse:Boolean}}pageLoad(e){this.attributes&&"lottie"===this.attributes.root&&"object"==typeof lottie?this.doneLoad=e:e()}siteIn(e){const t=(Date.now()-this.startTime)/1e3,s=this.attributes.duration-t;if(s<=0){const t=this.clear.bind(this,e);if(this.playerIn)this.playerIn.play(),this.playerIn.addEventListener("complete",t,{once:!0});else if("function"==typeof this.intro)this.intro(e,this.remove.bind(this));else{const e=window.getComputedStyle(this.el).getPropertyValue("transition-duration");""!==e&&"0s"!==e?(this.el.addEventListener("transitionend",t,{once:!0}),this.el.classList.add("is-hidden")):t()}}else setTimeout(this.siteIn.bind(this,e),1e3*s)}clear(e){this.playerIn&&this.playerIn.destroy(),this.remove(),e()}remove(e){this.el.parentNode.removeChild(this.el),this.el=null}add(e){this.intro=e}initLottie(){const e=this;if("lottie"===this.attributes.root&&"object"==typeof lottie){const t=this.attributes.in;let s=!1;t&&(s=lottie.loadAnimation({container:this.el,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}}),this.attributes.reverse&&s.setDirection(-1)),s.addEventListener("DOMLoaded",()=>{e.attributes.reverse&&s.goToAndStop(s.totalFrames-1,!0),e.el.setAttribute("style",""),"function"==typeof e.doneLoad&&(e.doneLoad(),e.doneLoad=null)},{once:!0}),this.playerIn=s}}}class d extends r{constructor(e){super("reveal"),this.luge=e,this.elements=[],this.toRevealIn=[],this.toRevealOut=[],this.reveals={in:{},out:{}},this.canReveal=!1,this.onScrollProgress=this.onScrollProgress.bind(this),e.reveal={add:this.add.bind(this)}}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),11),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this)),this.bindEvents()}setAttributes(){super.setAttributes(),this.pluginAttributes={root:String,stagger:String,manual:[Boolean,!1],multiple:Boolean,delay:[Number,0]}}getAttributes(e){const t=super.getAttributes(e);return void 0!==t.stagger&&""===t.stagger?t.stagger=this.luge._settings.reveal.stagger:void 0===t.stagger&&(t.stagger=!1),t}bindEvents(){this.luge.emitter.on("resize",this.resizeHandler,this),this.luge.emitter.on("scroll",this.scrollHandler,this),this.luge.emitter.on("update",this.updateHandler,this)}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-reveal]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);if(!t.stagger&&null!==e.closest("[data-lg-reveal-stagger]"))return;const s=t.root;e.luge.reveal.name=i.toCamelCase(s),t.manual?(e.luge.reveal.in=()=>{this.revealCallback(e,e.luge.reveal.name,"in"),this.setRevealClasses(e,"is-in")},e.luge.reveal.out=()=>{this.revealCallback(e,e.luge.reveal.name,"out"),this.setRevealClasses(e,"is-out")}):(this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress)),e.luge.reveal.delay=1e3*t.delay,t.stagger?Array.from(e.children).forEach(e=>{const t=e.dataset.lgReveal;e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),(t||s)&&e.classList.add("lg-reveal--"+(null!=t?t:s)),e.dataset.lgRevealChild="",(e.luge||(e.luge={}))&&(e.luge.reveal={isRevealed:!1})}):(e.style.transition="none",this.luge.ticker.nextTick(()=>{e.style.transition=""}),e.classList.add("lg-reveal","is-out"),s&&e.classList.add("lg-reveal--"+s)),this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.canReveal=!1,this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){const t=e.target,s=this.luge._settings.reveal.threshold;t.scrollProgress>=s&&t.scrollProgress<=1-s&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-s&&t.scrollEnd{e.scrollStart<0&&(this.toRevealIn.includes(e)||this.toRevealIn.push(e))}),this.revealElements(),e()}resizeHandler(){this.revealElements()}scrollHandler(){this.revealElements()}updateHandler(){this.addElements(),this.revealElements()}revealElements(){const e=this;if(this.canReveal){let t=0;this.toRevealIn.forEach(s=>{const o=i.toCamelCase(s.luge.reveal.root);t+=s.luge.reveal.delay,setTimeout(function(){e.revealCallback(s,o,"in"),s.luge.reveal.stagger?Array.from(s.children).forEach((t,l)=>{const n=i.toCamelCase(t.dataset.lgReveal);setTimeout(()=>{(n||o)&&e.revealCallback(t,null!=n?n:o,"in"),e.setRevealClasses(t,"is-in")},l*s.luge.reveal.stagger*1e3)}):e.setRevealClasses(s,"is-in")},t),t+=1e3*this.luge._settings.reveal.stagger,s.luge.reveal.multiple||e.removeElement(s)}),this.toRevealOut.forEach(t=>{const s=i.toCamelCase(t.luge.reveal.root);void 0!==t.luge.reveal.isRevealed&&e.revealCallback(t,s,"out");let o="";o=t.scrollProgress>.5?"is-out is-out-top":"is-out is-out-bottom",t.luge.reveal.stagger?Array.from(t.children).forEach((l,n)=>{const r=i.toCamelCase(l.dataset.lgReveal);setTimeout(()=>{(r||s)&&e.revealCallback(l,null!=r?r:s,"out"),e.setRevealClasses(l,o)},n*t.luge.reveal.stagger*1e3)}):e.setRevealClasses(t,o)}),this.toRevealIn=[],this.toRevealOut=[]}}setRevealClasses(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(t=>{e.classList.add(t)})}revealCallback(e,t,s){e.dispatchEvent(new CustomEvent("reveal"+s)),e.luge.reveal.isRevealed="in"===s,"function"==typeof this.reveals[s][t]?this.reveals[s][t](e):"function"==typeof e["onreveal"+s]&&e["onreveal"+s]()}add(e,t,s){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=s)}}class c extends r{constructor(e){super("transition"),this.luge=e,this.url=window.location.href,this.pathname=window.location.pathname,this.pageFetched=null,this.currentPage=null,this.reload=this.luge._settings.transition.reload,this.prevScrollTop=0,this.newScrollTop=0,this.transitions={in:{},out:{}},this.listeners={linkHandler:this.linkHandler.bind(this)},e.transition={add:this.add.bind(this)}}init(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")}bindLinksEvent(){document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(e=>{e.addEventListener("click",this.listeners.linkHandler)})}unbindLinksEvent(){document.querySelectorAll("a").forEach(e=>{e.removeEventListener("click",this.listeners.linkHandler)})}linkHandler(e){const t=e.currentTarget,s=t.getAttribute("href");if(s&&0!==s.indexOf("#")&&0!==s.indexOf("tel")&&0!==s.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===s.indexOf(window.location.origin)||0===s.indexOf("/")||-1===s.indexOf("/"))){if(e.preventDefault(),window.location.href===s)return;this.navigateTo(s),history.pushState(null,null,this.url)}}navigateTo(e){if(this.url=e,this.reload){const t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",t=>{window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")}pageInit(e){this.bindLinksEvent(),e()}initLoader(){const e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(()=>{e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){const t=e.getAttribute("data-lg-loader-out");let s=!1,i=e.getAttribute("data-lg-loader-in"),o=!1;t&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===i&&(i=t),i&&(o=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:i,rendererSettings:{preserveAspectRatio:"none"}}),i===t&&o.setDirection(-1)),e.playerOut=s,e.playerIn=o}}pageFetch(e){const t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(s){t.pageFetched=s,e()})}pageCreate(e){const t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),s=t.querySelector("[data-lg-page]");if(s){{this.currentPage.insertAdjacentElement("beforebegin",s),s.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(e=>{document.querySelector("head title").insertAdjacentElement("afterend",e)});const e=document.querySelector("head title"),i=t.querySelector("head title");e&&i&&(e.innerText=i.innerText)}window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url}pageKill(e){const t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()}pageOut(e){const t=this,s=document.querySelector("[data-lg-page]");if(s){const o=i.toCamelCase(s.getAttribute("data-lg-page"));let l=!1;if("function"==typeof this.transitions.out[o]?l=this.transitions.out[o]:"function"==typeof s.onpageout?l=s.onpageout:"function"==typeof this.transitions.out.default&&(l=this.transitions.out.default),l)l(s,e);else{const s=document.querySelector("[data-lg-loader]");if(s){if(s.playerOut)s.playerOut.stop(),s.playerOut.renderer.svgElement.style.opacity=1,s.playerOut.play(),s.playerOut.addEventListener("complete",()=>{t.reload||(s.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{const t=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==t&&"0s"!==t?s.addEventListener("transitionend",e,{once:!0}):e()}s.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)}pageIn(e){const t=document.querySelector("[data-lg-page]");if(t){const s=i.toCamelCase(t.getAttribute("data-lg-page"));let o=!1;if(t.style.opacity="","function"==typeof this.transitions.in[s]?o=this.transitions.in[s]:"function"==typeof t.onpagein?o=t.onpagein:"function"==typeof this.transitions.in.default&&(o=this.transitions.in.default),o)o(t,e);else{const t=document.querySelector("[data-lg-loader]");if(t&&t.classList.contains("is-visible"))if(t.playerIn)t.playerIn.stop(),t.playerIn.renderer.svgElement.style.opacity=1,"reverse"===t.getAttribute("data-lg-loader-in")?t.playerIn.goToAndPlay(t.playerIn.totalFrames,!0):t.playerIn.play(),t.playerIn.addEventListener("complete",()=>{t.playerIn.renderer.svgElement.style.opacity="",t.classList.remove("is-visible"),e()},{once:!0});else{const s=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==s&&"0s"!==s?t.addEventListener("transitionend",e,{once:!0}):e(),t.classList.remove("is-visible")}else e()}}else e()}historyStateChanged(){let e="";e=0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url),e.pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(()=>{this.newScrollTop=window.scrollY,window.scroll({top:this.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))}add(e,t="default",s){this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=s)}}class h extends r{constructor(e){super("scroll"),this.luge=e,this.elements=[],this.allowedProperties=["opacity","background-x","background-y"],this.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],this.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){if(!this.elements.includes(e)){const t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);const s={};s.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,s.yoyo=t.yoyo,s.inertia=t.inertia;let i=!1;if(void 0!==t.animate?i=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(i=this.presets[t.root]),i){const e={};for(const t in i)if(this.allowedProperties.includes(t)||this.transformProperties.includes(t)){const s=i[t];let o=String(s[0]),l=String(s[1]),n=o.match(/\d+([a-zA-Z%]+)/m);n?n=n[1]:0===t.indexOf("rotate")&&(n="deg"),o=Number(o.replace(n,"")),l=Number(l.replace(n,""));let r=t;"background-x"===t?r="background-position-x":"background-y"===t&&(r="background-position-y"),e[r]={from:o,to:l,current:o,unit:n}}s.properties=e}e.luge.scroll.animation=s,this.elements.push(e)}}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onScrollProgress(e){e.target.luge.scroll.animation.atDest=!1}tick(){for(const e of this.elements){if(e.luge.scroll.animation.atDest)continue;let t=e.scrollProgress;if(e.luge.scroll.yoyo&&(t=1-Math.abs(1-2*t)),e.luge.scroll.animation.smoothProgress+=(t-e.luge.scroll.animation.smoothProgress)*(1-e.luge.scroll.inertia),e.luge.scroll.animation.properties){const t={};for(const[s,i]of Object.entries(e.luge.scroll.animation.properties))i.current=i.from+(i.to-i.from)*e.luge.scroll.animation.smoothProgress,["x","y","z"].includes(s)?(t.translate3d||(t.translate3d={}))&&(t.translate3d[s]=i.current+i.unit):t[s]=i.current+i.unit;const s=[];for(const[e,i]of Object.entries(t))if(this.transformProperties.includes(e)){if("object"==typeof i)if("translate3d"===e){const e=Object.assign({x:0,y:0,z:0},i);i.string=e.x+", "+e.y+", "+e.z}else i.string=Object.values(i).join(", ");s.push(e+"("+("object"!=typeof i?i:i.string)+")")}const i={},o=[];s.length>0&&(i.transform=s.join(" "),o.push("transform"));for(const[e,s]of Object.entries(t))this.transformProperties.includes(e)||(i[e]=s,o.push(e));for(const[t,s]of Object.entries(i))e.style.setProperty(t,s);e.style.setProperty("will-change",o.join(", "))}else{const t=Math.round(1e3*(e.scrollProgress-e.luge.scroll.animation.smoothProgress))/1e3;e.style.setProperty("--progress",e.luge.scroll.animation.smoothProgress),e.style.setProperty("--abs-diff",Math.abs(t)),e.style.setProperty("--diff",t)}Math.abs(t-e.luge.scroll.animation.smoothProgress)<1e-4&&(e.luge.scroll.animation.atDest=!0)}}}class u extends r{constructor(){super("smooth"),window.hasSmoothScroll=!1,window.isSmoothScrolling=!1}init(){if(super.init(),this.element=document.documentElement,this.hasSmooth=this.element.hasAttribute("data-lg-smooth"),this.hasSmooth){var t,s;window.hasSmoothScroll=!0,this.smoothScroll=window.scrollTop,this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,document.documentElement.classList.add("has-smooth-scroll");const i=(null==(t=navigator)||null==(t=t.userAgentData)?void 0:t.platform)||(null==(s=navigator)?void 0:s.platform)||"unknown";this.virtualScroll=new e({el:this.element,firefoxMultiplier:50,mouseMultiplier:i.indexOf("Win")>-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}}bindEvents(){this.luge.emitter.on("scroll",this.onScroll,this)}onScroll(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)}onVirtualScroll({deltaY:e,originalEvent:t}){const s=!!t.composedPath().find(e=>null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent"));t.ctrlKey||s||(this.targetScroll-=e,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)}tick(){const e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;const t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)}}class g extends r{constructor(e){super("cursor"),this.luge=e,this.cursors=[],this.pointers=[],this.trails=[],this.hoverTags=["a","button","input"]}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}}bindEvents(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})}pageInit(e){const t=this,s=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");s.length>0&&s.forEach(e=>{const s=this.getAttributes(e);s.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(e=>{e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.classList.add("lg-cursor-pointer"),t.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(e=>{const i=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=document.createElementNS("http://www.w3.org/2000/svg","path");i.appendChild(o),e.appendChild(i),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:o}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):s.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):s.length,e.classList.add("lg-cursor-trail"),t.trails.push(e)}),e.classList.add("lg-cursor"),this.cursors.push(e)}),e()}hoverHandler(e){const t=e.target,s=t.tagName.toLowerCase(),i=t.getAttribute("data-lg-hover");let o=null;(this.hoverTags.includes(s)||null!==i)&&(o="mouseenter"===e.type),null!==o&&this.cursors.forEach(e=>{e.classList.toggle("lg-cursor--hover",o),null!==i&&""!==i&&e.classList.toggle("lg-cursor--hover--"+i,o)})}tick(e){this.pointers.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+s.x+"px, "+s.y+"px, 0)"}),this.trails.forEach(e=>{const t=e.luge.cursor.position,s=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){s.x+=(t.x-s.x)*e.luge.cursor.inertia,s.y+=(t.y-s.y)*e.luge.cursor.inertia;const i=e.luge.cursor.points;i.push({x:s.x,y:s.y}),i.length>e.luge.cursor.length&&i.shift();let o="",l=0;const n=(e,t)=>{const s=t.x-e.x,i=t.y-e.y;return{length:Math.sqrt(Math.pow(s,2)+Math.pow(i,2)),angle:Math.atan2(i,s)}},r=(e,t,s,i)=>{const o=n(t||e,s||e);l+=o.length;const r=o.angle+(i?Math.PI:0),a=.2*o.length;return[e.x+Math.cos(r)*a,e.y+Math.sin(r)*a]};o=((e,t)=>`${e.reduce((e,t,s,i)=>0===s?`M ${t.x},${t.y}`:`${e} ${((e,t,s)=>{const[i,o]=r(s[t-1],s[t-2],e),[l,n]=r(e,s[t-1],s[t+1],!0);return`C ${i},${o} ${l},${n} ${e.x},${e.y}`})(t,s,i)}`,"")}`)(i),e.luge.cursor.path.setAttribute("d",o),e.style.setProperty("--length",l)}})}}class p extends r{constructor(e){super("intersection"),this.luge=e,this.listeners={onViewportIntersect:this.onViewportIntersect.bind(this)}}init(){super.init(),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,class:String}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))}removeElement(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}onViewportIntersect(e){const t=e.target,s=t.luge.viewport.position,i=!!t.luge.intersection.class&&t.luge.intersection.class.split(" ");t.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(t.classList.add("is-in"),i&&document.documentElement.classList.add(...i)):(i&&document.documentElement.classList.remove(...i),t.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))}}class m extends r{constructor(e){super("lottie"),this.luge=e,this.elements=[],this.doneLoad=null,this.onViewportIntersect=this.onViewportIntersect.bind(this),this.onScrollProgress=this.onScrollProgress.bind(this),e.lottie={deferInit:this.deferInit.bind(this)}}init(){super.init(),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()}deferInit(){"object"==typeof lottie&&(this.pageInit(()=>{}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())}setAttributes(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements(),this.reveal(()=>{})}pageLoad(e){let t=!1;this.elements.length>0&&this.elements.forEach(e=>{e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()}pageInit(e){this.addElements(),e()}addElements(){const e=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(t=>{if(!t.player){const s=this.getAttributes(t);this.luge.scrollobserver.add(t),s.lazy||(e.initPlayer(t),t.addEventListener("revealin",e.play)),t.addEventListener("viewportintersect",e.onViewportIntersect)}})}pageKill(e){const t=this;let s=[];const i=document.querySelector("[data-lg-page] + [data-lg-page]");s=i?i.querySelectorAll("[data-lg-lottie]"):this.elements,s.forEach(e=>{e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()}reveal(e){this.toAutoplay.forEach(e=>{"in"===e.viewportPosition&&e.play()}),e()}onViewportIntersect(e){const t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)}initLazy(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",()=>{e.play()},{once:!0})}initPlayer(e){const t=this;this.toLoad++;const s=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:s.renderer,loop:s.loop&&!s.reverse,autoplay:!1,path:s.root}),void 0!==s.subframe&&e.player.setSubframe(s.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),s.autoplay&&this.toAutoplay.push(e),s.required&&this.requireds++,s.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):s.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){const i=Math.round(e.player.currentFrame);1===e.player.playDirection?i===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(s.reverse?()=>{e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:()=>{e.player.goToAndPlay(s.loopFrame,!0)},this)):i===s.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(()=>{e.player.setDirection(1),e.player.goToAndPlay(s.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",()=>{e.classList.add("is-loaded"),t.playerLoaded(s.required)},{once:!0})}setPlayerStateClasses(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")}playerLoaded(e=!1){this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(()=>{this.luge.emitter.emit("resize")})}play(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))}pause(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))}stop(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))}onScrollProgress(e){const t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)}}class v extends r{constructor(e){super("mouse"),this.luge=e,this.elements=[],this.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.inertia){const e=t.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.inertia=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.inertia),t.inertia=Math.max(Math.min(t.inertia,.99),0)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}addElements(){const e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(e=>{t.addElement(e)})}addElement(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))}removeElement(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}getMouseMovement(){const e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,s=Math.hypot(e,t);if(window.mouseSpeed+=.5*(s-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),s>1){const s=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=s,window.mouseDirection=s>=45&&s<135?"down":s>=135&&s<225?"left":s>=225&&s<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)}tick(){this.elements.forEach(e=>{const t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);const s=Math.round(1e3*(t.x-t.smoothX))/1e3,i=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(s)),e.style.setProperty("--diff-x",s),e.style.setProperty("--abs-diff-y",Math.abs(i)),e.style.setProperty("--diff-y",i)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})}}class b extends r{constructor(e){super("parallax"),this.luge=e,this.elements=[],this.onScrollProgress=this.onScrollProgress.bind(this)}init(){super.init(),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}setAttributes(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}}getAttributes(e){const t=super.getAttributes(e);if(t.amplitude){const e=t.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);t.amplitude=e?Number(e[1])+(Number(e[2])-Number(e[1]))*Math.random():Number(t.amplitude)}return t}bindEvents(){this.luge.emitter.on("update",this.updateHandler,this)}updateHandler(){this.addElements()}pageInit(e){this.addElements(),e()}pageKill(e){const t=this;this.elements.forEach(e=>{t.removeElement(e)}),e()}addElements(){document.querySelectorAll("[data-lg-parallax]").forEach(e=>{const t=this.getAttributes(e).disable;let s=!0;const i=(this.luge.browser||{}).is;t&&i&&("desktop"===t&&i("desktop")||"handheld"===t&&!i("desktop")||"mobile"===t&&i("mobile")||"tablet"===t&&i("tablet"))&&(s=!1),s&&this.addElement(e)})}addElement(e){this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(()=>{e.addEventListener("scrollprogress",this.onScrollProgress),this.moveElement(e)}))}removeElement(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)}onScrollProgress(e){this.moveElement(e.target)}moveElement(e){let t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2}tick(){this.elements.forEach(e=>{e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})}}class y{constructor(e){const s=document.documentElement,i=t.getParser(window.navigator.userAgent);s.classList.add("is-"+i.getPlatformType()),(i.is("mobile")||i.is("tablet"))&&s.classList.add("is-handheld"),i.is("Safari")&&(s.classList.add("is-safari"),s.classList.add("is-safari-"+i.getBrowserVersion())),e.browser=i}}var w=new class{constructor(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}init(e){this.createObserver(),e()}createObserver(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[n.settings.intersection.threshold]})}intersectionCallback(e){e.forEach(e=>{const t=e.target;let s="in";e.isIntersecting||(s=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==s&&(t.luge.viewport.position=s,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===s?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+s))))})}add(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))}remove(e){this.observer.unobserve(e)}},f=new class{constructor(){this.callbacks=[],this.onceCallbacks=[],n.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}add(e,t){let s=!1;this.callbacks.forEach(i=>{i.cb===e&&i.context===t&&(s=!0)}),s||this.callbacks.push({cb:e,context:t})}remove(e,t){const s=this;this.callbacks.forEach((i,o)=>{i.cb===e&&i.context===t&&delete s.callbacks[o]})}nextTick(e,t){this.onceCallbacks.push({cb:e,context:t})}_tick(e){const t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),n.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))}tick(e){const t=this;this.callbacks.forEach(t=>{t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach((s,i)=>{s.cb.apply(s.context,[e]),delete t.onceCallbacks[i]})}},E=new class{constructor(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),f.add(this.tick,this),this.bindEvents()}bindEvents(){o.on("mouseMove",this.mouseHandler,this),o.on("resize",this.resizeHandler,this),o.on("update",this.updateHandler,this),o.on("scroll",this.scrollHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],e()}init(e){this.getBoundingThrottle(),e()}resizeHandler(){this.getBoundingThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle()},this)}scrollHandler(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)}mouseHandler(){const e=this;this.elements.forEach(t=>{e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop}getBoundingThrottle(){this.elementsToBound=this.elements,f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e),this.setElementPosition(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect(),o={anchor:{x:s.left,y:s.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,o)),e.setAttribute("style",t)}setElementPosition(e){if(e.luge&&e.luge.anchor){const t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}}add(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)}tick(){const e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(t=>{e.setElementPosition(t)})}},S=new class{constructor(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}bindEvents(){o.on("resize",this.resizeHandler,this),o.on("scroll",this.scrollHandler,this),o.on("update",this.updateHandler,this)}pageKill(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()}init(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()}resizeHandler(){this.getBoundingThrottle(),this.checkElementsThrottle()}scrollHandler(){this.checkElementsThrottle()}updateHandler(){f.nextTick(()=>{this.getBoundingThrottle(),this.checkElementsThrottle()},this)}setMaxScrollTop(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight}getBoundingThrottle(){this.setMaxScrollTop(),this.elements.forEach(e=>{this.elementsToBound.includes(e)||(e.scrollProgress=0,this.elementsToBound.push(e))}),f.nextTick(this.getBounding.bind(this))}getBounding(){this.elementsToBound.forEach(e=>{this.setElementBounding(e)}),this.elementsToBound=[]}setElementBounding(e){const t=e.getAttribute("style");e.setAttribute("style","");const s=e.getBoundingClientRect();e.scrollStart=s.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)}checkElementsThrottle(){this.elements.forEach(e=>{this.elementsToCheck.includes(e)||this.elementsToCheck.push(e)}),f.nextTick(this.checkElements.bind(this))}checkElements(){this.elementsToCheck.forEach(e=>{this.checkElement(e)}),this.elementsToCheck=[]}checkElement(e){const t=window.unifiedScrollTop;let s="",i=0;i=e.scrollStart<0?Math.min(Math.max(t/e.scrollEnd,0),1):Math.min(Math.max((t-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(i)&&(i=0),s=i<=0&&e.scrollStart>0?"under":i>=1&&e.scrollEnd0&&i<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))}add(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))}remove(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)}},x=class{constructor(){this.plugins={},this.emitter={emit:o.emit.bind(o),off:o.off.bind(o),on:o.on.bind(o),once:o.once.bind(o)},this.viewportobserver={add:w.add.bind(w),remove:w.remove.bind(w)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:E.add.bind(E),remove:E.remove.bind(E)},this.scrollobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.ticker={add:f.add.bind(f),nextTick:f.nextTick.bind(f),remove:f.remove.bind(f),tick:f.tick.bind(f)},this.settings=n.setSettings.bind(n)}init(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(()=>{l.cycle("load")},null)}addPlugin(e,t){this.plugins[e]=new t(this)}get _settings(){return n.settings}};export{y as Browser,g as Cursor,p as Intersection,m as LottiePlayer,x as Luge,v as MouseAnimation,b as Parallax,r as Plugin,a as Preloader,d as Reveal,h as ScrollAnimation,u as SmoothScroll,c as Transition}; //# sourceMappingURL=luge.modern.js.map diff --git a/dist/js/luge.modern.js.map b/dist/js/luge.modern.js.map index 367ffe5..364bd9e 100644 --- a/dist/js/luge.modern.js.map +++ b/dist/js/luge.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"luge.modern.js","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/plugins/Browser.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers","[object Object]","item","Array","isArray","target","source","output","Object","assign","isObject","keys","forEach","key","mergeDeep","string","isString","replace","word","index","toLowerCase","toUpperCase","toCamelCase","charAt","slice","node","document","body","contains","obj","prop","deepFreeze","freeze","x","lower","upper","Math","min","max","Helpers$1","Emitter$1","constructor","this","events","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","length","event","do","next","wait","requestAnimationFrame","bind","add","position","remove","Emitter","sort","a","b","enableDebug","value","Core","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","LifeCycle","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","Luge","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","super","intro","playerIn","startTime","Date","now","doneLoad","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","default","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","progress","abs","entries","translate3d","transform","y","z","join","styles","willChange","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","clamp","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","line","pointA","pointB","lengthX","lengthY","sqrt","pow","angle","atan2","controlPoint","previous","o","PI","cos","sin","svgPath","command","reduce","acc","point","i","bezierCommand","cpsX","cpsY","cpeX","cpeY","Intersection","onViewportIntersect","class","viewportobserver","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","elementsToBound","Ticker","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","checkElement","isNaN","plugins","ViewportObserver","MouseObserver","readyState","addPlugin"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"luge.modern.js","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/plugins/Browser.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (this.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers","[object Object]","item","Array","isArray","target","source","output","Object","assign","isObject","keys","forEach","key","mergeDeep","string","isString","replace","word","index","toLowerCase","toUpperCase","toCamelCase","charAt","slice","node","document","body","contains","obj","prop","deepFreeze","freeze","x","lower","upper","Math","min","max","Helpers$1","Emitter$1","constructor","this","events","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","length","event","do","next","wait","requestAnimationFrame","bind","add","position","remove","Emitter","sort","a","b","enableDebug","value","Core","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","LifeCycle","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","Luge","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","super","intro","playerIn","startTime","Date","now","doneLoad","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","default","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","progress","abs","entries","translate3d","transform","y","z","join","styles","willChange","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","clamp","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","line","pointA","pointB","lengthX","lengthY","sqrt","pow","angle","atan2","controlPoint","previous","o","PI","cos","sin","svgPath","command","reduce","acc","point","i","bezierCommand","cpsX","cpsY","cpeX","cpeY","Intersection","onViewportIntersect","class","viewportobserver","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","elementsToBound","Ticker","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","checkElement","isNaN","plugins","ViewportObserver","MouseObserver","readyState","addPlugin"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/luge.module.js b/dist/js/luge.module.js index 9293321..93f0aa7 100644 --- a/dist/js/luge.module.js +++ b/dist/js/luge.module.js @@ -1,2 +1,2 @@ -import e from"virtual-scroll";import t from"bowser/src/bowser.js";var i=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),n=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),s=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),n.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(i){null===i.cycle||i.cycle===e?i.callback(function(){return s.done(e,t)}):s.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),n.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),o=new(/*#__PURE__*/function(){function e(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,s.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,n.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),n.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,n.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),n.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),n.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),r=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,s.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(o.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,n={};for(var s in t){var o=t[s],r="lg-"+this.pluginSlug;"root"!==s&&(r+="-"+s),r=i.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof o?(c=o[0],u=o[1]):c=o,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),n[s]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=n),n},e}();function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}function a(e,t){return(a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function c(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(o,r){var l=i.toCamelCase(o.dataset.lgReveal);setTimeout(function(){(l||s)&&t.revealCallback(o,null!=l?l:s,"out"),t.setRevealClasses(o,n)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,n)}),this.toRevealIn=[],this.toRevealOut=[]}},n.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},n.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},n.add=function(e,t,n){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=n)},t}(r),g=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(c(i))},t.transition={add:i.add.bind(c(i))},i}l(t,e);var n=t.prototype;return n.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},n.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},n.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},n.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},n.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},n.pageInit=function(e){this.bindLinksEvent(),e()},n.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},n.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},n.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},n.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},n.pageOut=function(e){var t=this,n=document.querySelector("[data-lg-page]");if(n){var s=i.toCamelCase(n.getAttribute("data-lg-page")),o=!1;if("function"==typeof this.transitions.out[s]?o=this.transitions.out[s]:"function"==typeof n.onpageout?o=n.onpageout:"function"==typeof this.transitions.out.default&&(o=this.transitions.out.default),o)o(n,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},n.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var n=i.toCamelCase(t.getAttribute("data-lg-page")),s=!1;if(t.style.opacity="","function"==typeof this.transitions.in[n]?s=this.transitions.in[n]:"function"==typeof t.onpagein?s=t.onpagein:"function"==typeof this.transitions.in.default&&(s=this.transitions.in.default),s)s(t,e);else{var o=document.querySelector("[data-lg-loader]");if(o&&o.classList.contains("is-visible"))if(o.playerIn)o.playerIn.stop(),o.playerIn.renderer.svgElement.style.opacity=1,"reverse"===o.getAttribute("data-lg-loader-in")?o.playerIn.goToAndPlay(o.playerIn.totalFrames,!0):o.playerIn.play(),o.playerIn.addEventListener("complete",function(){o.playerIn.renderer.svgElement.style.opacity="",o.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?o.addEventListener("transitionend",e,{once:!0}):e(),o.classList.remove("is-visible")}else e()}}else e()},n.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},n.add=function(e,t,n){void 0===t&&(t="default"),this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=n)},t}(r),p=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return u(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?u(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=d.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},s.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},s.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},s.onVirtualScroll=function(e){var t=e.deltaY,n=e.originalEvent,s=!!n.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});n.ctrlKey||s||(this.targetScroll-=t,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},s.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},n}(r),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(r),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(r),y=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(c(i)),i.onScrollProgress=i.onScrollProgress.bind(c(i)),t.lottie={deferInit:i.deferInit.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(r),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(r),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(r),E=function(e){var i=document.documentElement,n=t.getParser(window.navigator.userAgent);i.classList.add("is-"+n.getPlatformType()),(n.is("mobile")||n.is("tablet"))&&i.classList.add("is-handheld"),n.is("Safari")&&(i.classList.add("is-safari"),i.classList.add("is-safari-"+n.getBrowserVersion())),e.browser=n},S=new(/*#__PURE__*/function(){function e(){this.elements=[],s.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[o.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),T=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],o.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),o.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),x=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),T.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("mouseMove",this.mouseHandler,this),n.on("resize",this.resizeHandler,this),n.on("update",this.updateHandler,this),n.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var n=e.getBoundingClientRect(),s={anchor:{x:n.left,y:n.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,s)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("resize",this.resizeHandler,this),n.on("scroll",this.scrollHandler,this),n.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),T.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),P=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:n.emit.bind(n),off:n.off.bind(n),on:n.on.bind(n),once:n.once.bind(n)},this.viewportobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.lifecycle={add:s.add.bind(s),refresh:s.cycle.bind(s,"refresh"),remove:s.remove.bind(s),debug:s.enableDebug.bind(s),_cycle:s.cycle.bind(s)},this.mouseobserver={add:x.add.bind(x),remove:x.remove.bind(x)},this.scrollobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.ticker={add:T.add.bind(T),nextTick:T.nextTick.bind(T),remove:T.remove.bind(T),tick:T.tick.bind(T)},this.settings=o.setSettings.bind(o)}var t,i,r=e.prototype;return r.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",s.cycle.bind(s,"load"),{once:!0}):this.ticker.nextTick(function(){s.cycle("load")},null)},r.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return o.settings}}])&&function(e,t){for(var i=0;i1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),n.emit(i.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(i){null===i.cycle||i.cycle===e?i.callback(function(){return s.done(e,t)}):s.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),n.emit(i.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),o=new(/*#__PURE__*/function(){function e(){this.settings=i.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,s.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=i.deepFreeze(i.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,n.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),n.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,n.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),n.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),n.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),r=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,s.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(o.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,n={};for(var s in t){var o=t[s],r="lg-"+this.pluginSlug;"root"!==s&&(r+="-"+s),r=i.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof o?(c=o[0],u=o[1]):c=o,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),n[s]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=n),n},e}();function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}function a(e,t){return(a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function c(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(o,r){var l=i.toCamelCase(o.dataset.lgReveal);setTimeout(function(){(l||s)&&t.revealCallback(o,null!=l?l:s,"out"),t.setRevealClasses(o,n)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,n)}),this.toRevealIn=[],this.toRevealOut=[]}},n.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},n.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},n.add=function(e,t,n){this.reveals[e]&&(t=i.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=n)},t}(r),g=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(c(i))},t.transition={add:i.add.bind(c(i))},i}l(t,e);var n=t.prototype;return n.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},n.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},n.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},n.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},n.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},n.pageInit=function(e){this.bindLinksEvent(),e()},n.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},n.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},n.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},n.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},n.pageOut=function(e){var t=this,n=document.querySelector("[data-lg-page]");if(n){var s=i.toCamelCase(n.getAttribute("data-lg-page")),o=!1;if("function"==typeof this.transitions.out[s]?o=this.transitions.out[s]:"function"==typeof n.onpageout?o=n.onpageout:"function"==typeof this.transitions.out.default&&(o=this.transitions.out.default),o)o(n,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},n.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var n=i.toCamelCase(t.getAttribute("data-lg-page")),s=!1;if(t.style.opacity="","function"==typeof this.transitions.in[n]?s=this.transitions.in[n]:"function"==typeof t.onpagein?s=t.onpagein:"function"==typeof this.transitions.in.default&&(s=this.transitions.in.default),s)s(t,e);else{var o=document.querySelector("[data-lg-loader]");if(o&&o.classList.contains("is-visible"))if(o.playerIn)o.playerIn.stop(),o.playerIn.renderer.svgElement.style.opacity=1,"reverse"===o.getAttribute("data-lg-loader-in")?o.playerIn.goToAndPlay(o.playerIn.totalFrames,!0):o.playerIn.play(),o.playerIn.addEventListener("complete",function(){o.playerIn.renderer.svgElement.style.opacity="",o.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?o.addEventListener("transitionend",e,{once:!0}):e(),o.classList.remove("is-visible")}else e()}}else e()},n.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},n.add=function(e,t,n){void 0===t&&(t="default"),this.transitions[e]&&(t=i.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=n)},t}(r),p=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return u(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?u(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=d.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},s.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},s.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},s.onVirtualScroll=function(e){var t=e.deltaY,n=e.originalEvent,s=!!n.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});n.ctrlKey||s||(this.targetScroll-=t,this.targetScroll=i.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},s.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},n}(r),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(r),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(r),y=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(c(i)),i.onScrollProgress=i.onScrollProgress.bind(c(i)),t.lottie={deferInit:i.deferInit.bind(c(i))},i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(r),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(r),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(c(i)),i}l(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(e.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(r),E=function(e){var i=document.documentElement,n=t.getParser(window.navigator.userAgent);i.classList.add("is-"+n.getPlatformType()),(n.is("mobile")||n.is("tablet"))&&i.classList.add("is-handheld"),n.is("Safari")&&(i.classList.add("is-safari"),i.classList.add("is-safari-"+n.getBrowserVersion())),e.browser=n},S=new(/*#__PURE__*/function(){function e(){this.elements=[],s.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[o.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),T=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],o.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),o.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),x=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),T.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("mouseMove",this.mouseHandler,this),n.on("resize",this.resizeHandler,this),n.on("update",this.updateHandler,this),n.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var n=e.getBoundingClientRect(),s={anchor:{x:n.left,y:n.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=i.mergeDeep(e.luge,s)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=i.clamp(t.x/e.luge.width,0,1),t.progressY=i.clamp(t.y/e.luge.height,0,1),e.luge.mouse=i.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),s.add("pageKill",this.pageKill.bind(this)),s.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){n.on("resize",this.resizeHandler,this),n.on("scroll",this.scrollHandler,this),n.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;T.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),T.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),T.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),P=/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:n.emit.bind(n),off:n.off.bind(n),on:n.on.bind(n),once:n.once.bind(n)},this.viewportobserver={add:S.add.bind(S),remove:S.remove.bind(S)},this.lifecycle={add:s.add.bind(s),refresh:s.cycle.bind(s,"refresh"),remove:s.remove.bind(s),debug:s.enableDebug.bind(s),_cycle:s.cycle.bind(s)},this.mouseobserver={add:x.add.bind(x),remove:x.remove.bind(x)},this.scrollobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.ticker={add:T.add.bind(T),nextTick:T.nextTick.bind(T),remove:T.remove.bind(T),tick:T.tick.bind(T)},this.settings=o.setSettings.bind(o)}var t,i,r=e.prototype;return r.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",s.cycle.bind(s,"load"),{once:!0}):this.ticker.nextTick(function(){s.cycle("load")},null)},r.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return o.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"luge.module.js","sources":["../../src/js/luge/core/Helpers.js","../../src/js/luge/core/Emitter.js","../../src/js/luge/core/LifeCycle.js","../../src/js/luge/core/Core.js","../../src/js/luge/core/Plugin.js","../../src/js/luge/plugins/Preloader.js","../../src/js/luge/plugins/Reveal.js","../../src/js/luge/plugins/Transition.js","../../src/js/luge/plugins/ScrollAnimation.js","../../src/js/luge/plugins/SmoothScroll.js","../../src/js/luge/plugins/Cursor.js","../../src/js/luge/plugins/Intersection.js","../../src/js/luge/plugins/LottiePlayer.js","../../src/js/luge/plugins/MouseAnimation.js","../../src/js/luge/plugins/Parallax.js","../../src/js/luge/plugins/Browser.js","../../src/js/luge/core/ViewportObserver.js","../../src/js/luge/core/Ticker.js","../../src/js/luge/core/MouseObserver.js","../../src/js/luge/core/ScrollObserver.js","../../src/js/luge/core/index.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (this.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","Browser","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","Luge$2","plugins","readyState","addPlugin","get"],"mappings":"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"} \ No newline at end of file diff --git a/dist/luge.umd.js b/dist/luge.umd.js index 6658f1d..3f1cb1b 100644 --- a/dist/luge.umd.js +++ b/dist/luge.umd.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("virtual-scroll"),require("bowser/src/bowser.js")):"function"==typeof define&&define.amd?define(["virtual-scroll","bowser/src/bowser.js"],t):t((e||self).virtualScroll,e.Bowser)}(this,function(e,t){function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/i(e),s=/*#__PURE__*/i(t),o=/*#__PURE__*/function(){function e(){}return e.isArray=function(e){return e&&"object"==typeof e&&Array.isArray(e)},e.isObject=function(e){return e&&"object"==typeof e&&!Array.isArray(e)},e.isString=function(e){return e&&"string"==typeof e},e.mergeDeep=function(t,i){var n=Object.assign({},t);return e.isObject(t)&&e.isObject(i)&&Object.keys(i).forEach(function(s){var o,r;e.isObject(i[s])?s in t?n[s]=e.isObject(t[s])&&e.isObject(i[s])?e.mergeDeep(t[s],i[s]):i[s]:Object.assign(n,((o={})[s]=i[s],o)):Object.assign(n,((r={})[s]=i[s],r))}),n},e.toCamelCase=function(t){return e.isString(t)?t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(e,t){return 0===t?e.toLowerCase():e.toUpperCase()}).replace(/\W+/g,""):t},e.toUpperCamelCase=function(t){return e.isString(t)?(t=e.toCamelCase(t)).charAt(0).toUpperCase()+t.slice(1):t},e.isInPage=function(e){return e!==document.body&&document.body.contains(e)},e.deepFreeze=function(t){return Object.keys(t).forEach(function(i){"object"==typeof t[i]&&e.deepFreeze(t[i])}),Object.freeze(t)},e.clamp=function(e,t,i){return Math.min(i,Math.max(t,e))},e}(),r=new(/*#__PURE__*/function(){function e(){this.events=[]}var t=e.prototype;return t.on=function(e,t,i,n){void 0===n&&(n=!1),(this.events[e]||(this.events[e]=[])).push({cb:t,context:i,once:n})},t.once=function(e,t,i){this.on(e,t,i,!0)},t.emit=function(e){var t=this,i=[].slice.call(arguments,1);this.events[e]&&this.events[e].forEach(function(n,s){n.cb.apply(n.context,i),n.once&&delete t.events[e][s]})},t.off=function(e,t){var i=this;this.events[e]&&this.events[e].forEach(function(n,s){n.cb===t&&delete i.events[e][s]})},e}()),l=new(/*#__PURE__*/function(){function e(){var e=this;this.eventsName=["siteInit","pageInit","siteLoad","pageLoad","siteIn","pageIn","reveal","pageFetch","pageOut","pageCreate","pageKill","siteReload"],this.events={},this.eventsName.forEach(function(t){e.events[t]={callbacks:[],done:0}}),this.cycles={load:{events:["siteInit","pageInit",["siteLoad","pageLoad"],"siteIn","pageIn","reveal"]},reload:{events:["pageOut","siteReload"]},transition:{events:[["pageFetch","pageOut"],"pageCreate","pageKill","pageInit","pageLoad","pageIn","reveal"]},refresh:{events:["pageKill","pageInit","pageLoad","pageIn","reveal"]}},this.debug=!1}var t=e.prototype;return t.cycle=function(e){if(this.cycles[e]){for(var t in this.cycles[e].current=0,this.debug&&console.log("Start cycle: "+e),this.events)this.events[t].done=0;this.proceed(e)}},t.proceed=function(e){var t=this,i=this.cycles[e].events,n=this.cycles[e].current;if(n1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),P=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(window.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),x=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),x.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),x.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=new(/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:x.add.bind(x),nextTick:x.nextTick.bind(x),remove:x.remove.bind(x),tick:x.tick.bind(x)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i1&&r.forEach(function(e){(0===t.events[e].done||t.events[e].done0?(this.debug&&console.log("Do event: "+t+" ("+e+" cycle)"),r.emit(o.toCamelCase("before-"+t)),this.events[t].callbacks.sort(function(e,t){return e.position-t.position}).forEach(function(n){null===n.cycle||n.cycle===e?n.callback(function(){return i.done(e,t)}):i.done(e,t)})):this.done(e,t)},t.done=function(e,t){this.events[t].done++,this.debug&&console.log("Done event: "+t+" "+this.events[t].done+"/"+this.events[t].callbacks.length+" ("+e+" cycle)"),r.emit(o.toCamelCase("after-"+t)),this.events[t].done>=this.events[t].callbacks.length&&this.next(e,t)},t.enableDebug=function(e){void 0===e&&(e=!0),this.debug=e},e}()),a=new(/*#__PURE__*/function(){function e(){this.settings=o.deepFreeze({cursor:{inertia:1,trailLength:10},intersection:{threshold:.3},lottie:{renderer:"svg",subFrame:!0},mouse:{inertia:.1},parallax:{inertia:.1},preloader:{duration:0},reveal:{stagger:.1,threshold:.15},scroll:{inertia:.1},smooth:{inertia:.1},ticker:{external:!1},transition:{reload:!1},credits:{show:!0}}),this.timeouts={resizeThrottle:null,scrollEnd:null},this.windowWidth=1,this.windowHeight=1,this.clientWidth=1,window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,window.maxScrollTop=1,window.scrollProgress=0,this.previousScrollTop=window.scrollY,this.isScrolling=!1,window.mouseX=-1,window.mouseY=-1,window.mouseLastScrollTop=0,l.add("siteInit",this.siteInit.bind(this),999),this.bindEvents()}var t=e.prototype;return t.setSettings=function(e){this.settings=o.deepFreeze(o.mergeDeep(this.settings,e))},t.siteInit=function(e){this.showCredits(),this.setCSSProperties(),this.scrollHandler(),e()},t.bindEvents=function(){window.addEventListener("mousemove",this.mouseHandler.bind(this),{passive:!0}),window.addEventListener("resize",this.resizeThrottle.bind(this)),window.addEventListener("scroll",this.scrollHandler.bind(this),{passive:!0})},t.mouseHandler=function(e){var t=e.pageY-window.scrollTop;window.mouseX=e.pageX,window.mouseY=t,r.emit("mouseMove",e)},t.resizeThrottle=function(){clearTimeout(this.timeouts.resizeThrottle),this.timeouts.resizeThrottle=setTimeout(this.resizeHandler.bind(this),200)},t.resizeHandler=function(){this.setCSSProperties(),r.emit("resize")},t.setCSSProperties=function(){var e=this,t=window.innerWidth;this.windowWidth!==t&&(this.windowWidth=t,this.clientWidth=document.body.clientWidth);var i=window.innerHeight;this.windowHeight!==i&&(this.windowHeight=i,this.clientHeight=document.body.clientHeight),requestAnimationFrame(function(){document.documentElement.style.setProperty("--vw",.01*e.windowWidth+"px"),document.documentElement.style.setProperty("--cw",.01*e.clientWidth+"px"),document.documentElement.style.setProperty("--vh",.01*e.windowHeight+"px"),document.documentElement.style.setProperty("--ch",.01*e.clientHeight+"px")})},t.scrollHandler=function(){window.scrollTop=window.scrollY,window.unifiedScrollTop=window.scrollTop,this.isScrolling||this.scrollStart(),clearTimeout(this.timeouts.scrollEnd),this.timeouts.scrollEnd=setTimeout(this.scrollEnd.bind(this),200),this.previousScrollTop=window.scrollTop,window.scrollProgress=window.scrollTop/window.maxScrollTop,r.emit("scroll")},t.scrollStart=function(){this.isScrolling=!0,document.documentElement.classList.add("is-scrolling"),r.emit("scrollStart")},t.scrollEnd=function(){this.isScrolling=!1,document.documentElement.classList.remove("is-scrolling"),r.emit("scrollEnd")},t.showCredits=function(){if(this.settings.credits.show){var e="background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; ";console.log("%c powered by %cluge%c / 0.6.17-beta.2 %c > https://luge.cool ",e,"background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; font-weight: bold; ",e,"color: black; font: 400 1em monospace; padding: 0.5em 0; ")}},e}()),c=/*#__PURE__*/function(){function e(e){this.pluginSlug=e,l.add("siteInit",this.beforeInit.bind(this),5)}var t=e.prototype;return t.beforeInit=function(e){this.isDisabled=this.disabled(),this.isDisabled?document.documentElement.classList.add("lg-"+this.pluginSlug+"-disabled"):this.init(),e()},t.init=function(){this.setAttributes()},t.disabled=function(){return!!(a.settings[this.pluginSlug]||{}).disabled},t.setAttributes=function(){this.pluginAttributes={}},t.getAttributes=function(e){var t=this.pluginAttributes,i={};for(var n in t){var s=t[n],r="lg-"+this.pluginSlug;"root"!==n&&(r+="-"+n),r=o.toCamelCase(r);var l,a=e.dataset[r],c=void 0,u=void 0;"object"==typeof s?(c=s[0],u=s[1]):c=s,l=void 0===a&&void 0!==u?c(u):(void 0!==a||c!==Boolean)&&(void 0!==a?c===Boolean?"false"!==a:c(a):void 0),i[n]=l}return(e.luge||(e.luge={}))&&(e.luge[this.pluginSlug]=i),i},e}();function u(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,d(e,t)}function d(e,t){return(d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i=i&&t.scrollProgress<=1-i&&!t.luge.reveal.isRevealed?(this.toRevealOut.includes(t)&&this.toRevealOut.splice(this.toRevealOut.indexOf(t),1),this.toRevealIn.includes(t)||this.toRevealIn.push(t)):(t.scrollProgress1-i&&t.scrollEnd.5?"is-out is-out-top":"is-out is-out-bottom",e.luge.reveal.stagger?Array.from(e.children).forEach(function(s,r){var l=o.toCamelCase(s.dataset.lgReveal);setTimeout(function(){(l||n)&&t.revealCallback(s,null!=l?l:n,"out"),t.setRevealClasses(s,i)},r*e.luge.reveal.stagger*1e3)}):t.setRevealClasses(e,i)}),this.toRevealIn=[],this.toRevealOut=[]}},i.setRevealClasses=function(e,t){t=t.split(" "),e.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),t.forEach(function(t){e.classList.add(t)})},i.revealCallback=function(e,t,i){e.dispatchEvent(new CustomEvent("reveal"+i)),e.luge.reveal.isRevealed="in"===i,"function"==typeof this.reveals[i][t]?this.reveals[i][t](e):"function"==typeof e["onreveal"+i]&&e["onreveal"+i]()},i.add=function(e,t,i){this.reveals[e]&&(t=o.toCamelCase(t),this.reveals[e][t]?console.log("Reveal animation named "+t+" already exists."):this.reveals[e][t]=i)},t}(c),f=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"transition")||this).luge=t,i.url=window.location.href,i.pathname=window.location.pathname,i.pageFetched=null,i.currentPage=null,i.reload=i.luge._settings.transition.reload,i.prevScrollTop=0,i.newScrollTop=0,i.transitions={in:{},out:{}},i.listeners={linkHandler:i.linkHandler.bind(h(i))},t.transition={add:i.add.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){this.currentPage=document.querySelector("[data-lg-page]"),this.currentPage&&(this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload),this.initLoader(),this.reload||window.addEventListener("popstate",this.historyStateChanged.bind(this)),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageFetch",this.pageFetch.bind(this)),this.luge.lifecycle.add("pageOut",this.pageOut.bind(this)),this.luge.lifecycle.add("pageIn",this.pageIn.bind(this),10,"transition"),this.luge.lifecycle.add("pageCreate",this.pageCreate.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this),999,"transition")},i.bindLinksEvent=function(){var e=this;document.querySelector("[data-lg-page]")&&document.querySelectorAll("a").forEach(function(t){t.addEventListener("click",e.listeners.linkHandler)})},i.unbindLinksEvent=function(){var e=this;document.querySelectorAll("a").forEach(function(t){t.removeEventListener("click",e.listeners.linkHandler)})},i.linkHandler=function(e){var t=e.currentTarget,i=t.getAttribute("href");if(i&&0!==i.indexOf("#")&&0!==i.indexOf("tel")&&0!==i.indexOf("mailto")&&!t.closest("#wpadminbar")&&"disabled"!==t.getAttribute("data-lg-transition")&&"_blank"!==t.getAttribute("target")&&(0===i.indexOf(window.location.origin)||0===i.indexOf("/")||-1===i.indexOf("/"))){if(e.preventDefault(),window.location.href===i)return;this.navigateTo(i),history.pushState(null,null,this.url)}},i.navigateTo=function(e){if(this.url=e,this.reload){var t=document.createElement("link");t.rel="prefetch",t.href=e,document.head.appendChild(t),this.luge.lifecycle.add("siteReload",function(t){window.location=e}),this.luge.lifecycle._cycle("reload")}else this.luge.lifecycle._cycle("transition")},i.pageInit=function(e){this.bindLinksEvent(),e()},i.initLoader=function(){var e=document.querySelector("[data-lg-loader]");if(e&&(e.style.transition="none",e.classList.add("lg-loader","lg-loader--"+e.getAttribute("data-lg-loader")),this.luge.ticker.nextTick(function(){e.style.transition=""})),e&&"lottie"===e.getAttribute("data-lg-loader")&&"object"==typeof lottie){var t=e.getAttribute("data-lg-loader-out"),i=!1,n=e.getAttribute("data-lg-loader-in"),s=!1;t&&(i=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:t,rendererSettings:{preserveAspectRatio:"none"}})),"reverse"===n&&(n=t),n&&(s=lottie.loadAnimation({container:e,renderer:"svg",loop:!1,autoplay:!1,path:n,rendererSettings:{preserveAspectRatio:"none"}}),n===t&&s.setDirection(-1)),e.playerOut=i,e.playerIn=s}},i.pageFetch=function(e){var t=this;this.url&&fetch(this.url,{credentials:"include"}).then(function(e){return e.text()}).then(function(i){t.pageFetched=i,e()})},i.pageCreate=function(e){var t=(new DOMParser).parseFromString(this.pageFetched,"text/html"),i=t.querySelector("[data-lg-page]");if(i){this.currentPage.insertAdjacentElement("beforebegin",i),i.style.opacity=0,this.currentPage.style.opacity=0,this.currentPage.style.position="absolute",this.currentPage.style.top=0,this.currentPage.style.left="-999em",this.currentPage.style.width="100%",document.querySelector("body").className=t.querySelector("body").className,document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){e.parentNode.removeChild(e)}),t.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:image"]').forEach(function(e){document.querySelector("head title").insertAdjacentElement("afterend",e)});var n=document.querySelector("head title"),s=t.querySelector("head title");n&&s&&(n.innerText=s.innerText),window.scroll({top:this.newScrollTop,left:0,behavior:"instant"}),window.scrollTop=0,window.smoothScrollTop=0,window.unifiedScrollTop=0,this.prevScrollTop=0,this.newScrollTop=0,this.luge.emitter.emit("pageTransition",t),e()}else window.location=this.url},i.pageKill=function(e){var t=this.currentPage;t.parentNode.removeChild(t),this.currentPage=document.querySelector("[data-lg-page]"),this.reload=!!this.currentPage.hasAttribute("data-lg-reload")||this.luge._settings.transition.reload,e()},i.pageOut=function(e){var t=this,i=document.querySelector("[data-lg-page]");if(i){var n=o.toCamelCase(i.getAttribute("data-lg-page")),s=!1;if("function"==typeof this.transitions.out[n]?s=this.transitions.out[n]:"function"==typeof i.onpageout?s=i.onpageout:"function"==typeof this.transitions.out.default&&(s=this.transitions.out.default),s)s(i,e);else{var r=document.querySelector("[data-lg-loader]");if(r){if(r.playerOut)r.playerOut.stop(),r.playerOut.renderer.svgElement.style.opacity=1,r.playerOut.play(),r.playerOut.addEventListener("complete",function(){t.reload||(r.playerOut.renderer.svgElement.style.opacity=""),e()},{once:!0});else{var l=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==l&&"0s"!==l?r.addEventListener("transitionend",e,{once:!0}):e()}r.classList.add("is-visible")}else e()}}else e();this.unbindLinksEvent.bind(this)},i.pageIn=function(e){var t=document.querySelector("[data-lg-page]");if(t){var i=o.toCamelCase(t.getAttribute("data-lg-page")),n=!1;if(t.style.opacity="","function"==typeof this.transitions.in[i]?n=this.transitions.in[i]:"function"==typeof t.onpagein?n=t.onpagein:"function"==typeof this.transitions.in.default&&(n=this.transitions.in.default),n)n(t,e);else{var s=document.querySelector("[data-lg-loader]");if(s&&s.classList.contains("is-visible"))if(s.playerIn)s.playerIn.stop(),s.playerIn.renderer.svgElement.style.opacity=1,"reverse"===s.getAttribute("data-lg-loader-in")?s.playerIn.goToAndPlay(s.playerIn.totalFrames,!0):s.playerIn.play(),s.playerIn.addEventListener("complete",function(){s.playerIn.renderer.svgElement.style.opacity="",s.classList.remove("is-visible"),e()},{once:!0});else{var r=window.getComputedStyle(document.querySelector("[data-lg-loader]")).getPropertyValue("transition-duration");""!==r&&"0s"!==r?s.addEventListener("transitionend",e,{once:!0}):e(),s.classList.remove("is-visible")}else e()}}else e()},i.historyStateChanged=function(){var e=this;(0===this.url.indexOf(window.location.origin)?new URL(this.url):new URL(window.location.origin+this.url)).pathname!==window.location.pathname&&(this.prevScrollTop=window.scrollY,this.luge.ticker.nextTick(function(){e.newScrollTop=window.scrollY,window.scroll({top:e.prevScrollTop,left:0,behavior:"instant"})}),this.navigateTo(window.location.href))},i.add=function(e,t,i){void 0===t&&(t="default"),this.transitions[e]&&(t=o.toCamelCase(t),this.transitions[e][t]?console.log("Transition animation for "+t+" page already exists."):this.transitions[e][t]=i)},t}(c),v=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"scroll")||this).luge=t,i.elements=[],i.allowedProperties=["opacity","background-x","background-y"],i.transformProperties=["x","y","z","translate3d","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ"],i.presets={"background-x":{"background-x":["0%","100%"]},"background-y":{"background-y":["0%","100%"]}},i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,yoyo:Boolean,inertia:[String,this.luge._settings.scroll.inertia],animate:String}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-scroll]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){if(!this.elements.includes(e)){var t=this.getAttributes(e);this.luge.scrollobserver.add(e),e.addEventListener("scrollprogress",this.onScrollProgress);var i={};i.smoothProgress=void 0!==e.scrollProgress?e.scrollProgress:0,i.yoyo=t.yoyo,i.inertia=t.inertia;var n=!1;if(void 0!==t.animate?n=JSON.parse(t.animate.replace(/'/g,'"')):this.presets[t.root]&&(n=this.presets[t.root]),n){var s={};for(var o in n)if(this.allowedProperties.includes(o)||this.transformProperties.includes(o)){var r=n[o],l=String(r[0]),a=String(r[1]),c=l.match(/\d+([a-zA-Z%]+)/m);c?c=c[1]:0===o.indexOf("rotate")&&(c="deg"),l=Number(l.replace(c,"")),a=Number(a.replace(c,""));var u=o;"background-x"===o?u="background-position-x":"background-y"===o&&(u="background-position-y"),s[u]={from:l,to:a,current:l,unit:c}}i.properties=s}e.luge.scroll.animation=i,this.elements.push(e)}},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onScrollProgress=function(e){e.target.luge.scroll.animation.atDest=!1},i.tick=function(){for(var e,t=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return g(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(e,t):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this.elements);!(e=t()).done;){var i=e.value;if(!i.luge.scroll.animation.atDest){var n=i.scrollProgress;if(i.luge.scroll.yoyo&&(n=1-Math.abs(1-2*n)),i.luge.scroll.animation.smoothProgress+=(n-i.luge.scroll.animation.smoothProgress)*(1-i.luge.scroll.inertia),i.luge.scroll.animation.properties){for(var s={},o=0,r=Object.entries(i.luge.scroll.animation.properties);o0&&(y.transform=u.join(" "),b.push("transform"));for(var w=0,E=Object.entries(s);w-1?1:.4,useKeyboard:!1,useTouch:!1,passive:!0}),this.virtualScroll.on(this.onVirtualScroll.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()}},i.bindEvents=function(){this.luge.emitter.on("scroll",this.onScroll,this)},i.onScroll=function(){window.isSmoothScrolling||(this.targetScroll=window.scrollTop,this.targetSmoothScroll=window.scrollTop,this.smoothScroll=window.scrollTop)},i.onVirtualScroll=function(e){var t=e.deltaY,i=e.originalEvent,n=!!i.composedPath().find(function(e){return null==e||null==e.hasAttribute?void 0:e.hasAttribute("data-lg-smooth-prevent")});i.ctrlKey||n||(this.targetScroll-=t,this.targetScroll=o.clamp(0,this.targetScroll,window.maxScrollTop),window.isSmoothScrolling=!0)},i.tick=function(){var e=this.luge._settings.smooth;this.targetSmoothScroll+=(this.targetScroll-this.targetSmoothScroll)*e.inertia,this.smoothScroll+=(this.targetSmoothScroll-this.smoothScroll)*e.inertia;var t=Math.abs(this.targetSmoothScroll-this.smoothScroll);window.isSmoothScrolling&&t>.5?window.scrollTo({top:this.smoothScroll,behavior:"auto"}):window.isSmoothScrolling&&(this.smoothScroll=this.targetSmoothScroll,window.isSmoothScrolling=!1)},t}(c),b=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"cursor")||this).luge=t,i.cursors=[],i.pointers=[],i.trails=[],i.hoverTags=["a","button","input"],i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[Number,this.luge._settings.cursor.inertia],length:[Number,this.luge._settings.cursor.trailLength],hide:Boolean}},i.bindEvents=function(){document.documentElement.addEventListener("mouseenter",this.hoverHandler.bind(this),{capture:!0,passive:!0}),document.documentElement.addEventListener("mouseleave",this.hoverHandler.bind(this),{capture:!0,passive:!0})},i.pageInit=function(e){var t=this,i=this,n=document.querySelectorAll("[data-lg-cursor]:not(.lg-cursor)");n.length>0&&n.forEach(function(e){var n=t.getAttributes(e);n.hide&&document.documentElement.classList.add("lg-cursor-hide"),e.querySelectorAll("[data-lg-cursor-pointer").forEach(function(e){e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0}}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.classList.add("lg-cursor-pointer"),i.pointers.push(e)}),e.querySelectorAll("[data-lg-cursor-trail").forEach(function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","path");t.appendChild(s),e.appendChild(t),e.luge={cursor:{position:{x:0,y:0},smoothPosition:{x:0,y:0},points:[],path:s}},e.luge.cursor.inertia=e.hasAttribute("data-lg-cursor-inertia")?Number(e.getAttribute("data-lg-cursor-inertia")):n.inertia,e.luge.cursor.length=e.hasAttribute("data-lg-cursor-length")?Number(e.getAttribute("data-lg-cursor-length")):n.length,e.classList.add("lg-cursor-trail"),i.trails.push(e)}),e.classList.add("lg-cursor"),t.cursors.push(e)}),e()},i.hoverHandler=function(e){var t=e.target,i=t.tagName.toLowerCase(),n=t.getAttribute("data-lg-hover"),s=null;(this.hoverTags.includes(i)||null!==n)&&(s="mouseenter"===e.type),null!==s&&this.cursors.forEach(function(e){e.classList.toggle("lg-cursor--hover",s),null!==n&&""!==n&&e.classList.toggle("lg-cursor--hover--"+n,s)})},i.tick=function(e){this.pointers.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;t.x=window.mouseX,t.y=window.mouseY,i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia,e.style.transform="translate3d("+i.x+"px, "+i.y+"px, 0)"}),this.trails.forEach(function(e){var t=e.luge.cursor.position,i=e.luge.cursor.smoothPosition;if(t.x=window.mouseX,t.y=window.mouseY,-1!==window.mouseX){i.x+=(t.x-i.x)*e.luge.cursor.inertia,i.y+=(t.y-i.y)*e.luge.cursor.inertia;var n=e.luge.cursor.points;n.push({x:i.x,y:i.y}),n.length>e.luge.cursor.length&&n.shift();var s,o=0,r=function(e,t,i,n){var s,r,l,a,c=(l=(r=i||e).x-(s=t||e).x,a=r.y-s.y,{length:Math.sqrt(Math.pow(l,2)+Math.pow(a,2)),angle:Math.atan2(a,l)});o+=c.length;var u=c.angle+(n?Math.PI:0),d=.2*c.length;return[e.x+Math.cos(u)*d,e.y+Math.sin(u)*d]};s=function(e,t){return""+e.reduce(function(e,t,i,n){return 0===i?"M "+t.x+","+t.y:e+" "+function(e,t,i){var n=r(i[t-1],i[t-2],e),s=n[0],o=n[1],l=r(e,i[t-1],i[t+1],!0);return"C "+s+","+o+" "+l[0]+","+l[1]+" "+e.x+","+e.y}(t,i,n)},"")}(n),e.luge.cursor.path.setAttribute("d",s),e.style.setProperty("--length",o)}})},t}(c),w=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"intersection")||this).luge=t,i.listeners={onViewportIntersect:i.onViewportIntersect.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.elements=[],this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,class:String}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-intersection]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.viewportobserver.add(e),e.addEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&(this.luge.viewportobserver.remove(e),e.removeEventListener("viewportintersect",this.listeners.onViewportIntersect),this.elements.splice(this.elements.indexOf(e),1))},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.onViewportIntersect=function(e){var t,i,n=e.target,s=n.luge.viewport.position,o=!!n.luge.intersection.class&&n.luge.intersection.class.split(" ");n.classList.remove("is-in","is-out","is-out-top","is-out-bottom"),"in"===s?(n.classList.add("is-in"),o&&(t=document.documentElement.classList).add.apply(t,o)):(o&&(i=document.documentElement.classList).remove.apply(i,o),n.classList.add("is-out","above"===s?"is-out-top":"is-out-bottom"))},t}(c),E=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"lottie")||this).luge=t,i.elements=[],i.doneLoad=null,i.onViewportIntersect=i.onViewportIntersect.bind(h(i)),i.onScrollProgress=i.onScrollProgress.bind(h(i)),t.lottie={deferInit:i.deferInit.bind(h(i))},i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),"object"==typeof lottie&&(this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageLoad",this.pageLoad.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.lifecycle.add("reveal",this.reveal.bind(this))),this.bindEvents()},i.deferInit=function(){"object"==typeof lottie&&(this.pageInit(function(){}),LifeCycle.add("pageKill",this.pageKill.bind(this)),LifeCycle.add("reveal",this.reveal.bind(this)),ScrollObserver.updateHandler())},i.setAttributes=function(){this.pluginAttributes={root:String,autoplay:Boolean,scroll:Boolean,loop:Boolean,loopFrame:[Number,0],reverse:Boolean,required:Boolean,force:Boolean,lazy:Boolean,renderer:[String,Luge.settings.lottie.renderer],subframe:[Boolean,Luge.settings.lottie.subFrame]}},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements(),this.reveal(function(){})},i.pageLoad=function(e){var t=!1;this.elements.length>0&&this.elements.forEach(function(e){e.luge.lottie.required&&!e.player.isLoaded&&(t=!0)}),t?this.doneLoad=e:e()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=this,t=this;this.elements=document.querySelectorAll("[data-lg-lottie]"),this.toAutoplay=[],this.toLoad=0,this.requireds=0,this.elements.forEach(function(i){if(!i.player){var n=e.getAttributes(i);e.luge.scrollobserver.add(i),n.lazy||(t.initPlayer(i),i.addEventListener("revealin",t.play)),i.addEventListener("viewportintersect",t.onViewportIntersect)}})},i.pageKill=function(e){var t=this,i=document.querySelector("[data-lg-page] + [data-lg-page]");(i?i.querySelectorAll("[data-lg-lottie]"):this.elements).forEach(function(e){e.removeEventListener("revealin",t.play),e.removeEventListener("viewportintersect",t.onViewportIntersect),e.hasAttribute("data-lg-lottie-scroll")&&e.removeEventListener("scrollprogress",t.onScrollProgress),e.player&&(e.player.destroy(),delete e.player)}),e()},i.reveal=function(e){this.toAutoplay.forEach(function(e){"in"===e.viewportPosition&&e.play()}),e()},i.onViewportIntersect=function(e){var t=e.target;t.player?t.luge.lottie.force||("in"===t.viewportPosition?t.player.isPaused&&(t.player.scrollPaused||t.hasAttribute("data-lg-lottie-autoplay"))&&(t.player.scrollPaused=!1,t.play()):t.player.isPaused||(t.player.scrollPaused=!0,t.pause())):"in"===t.viewportPosition&&this.initLazy(t)},i.initLazy=function(e){this.initPlayer(e),e.player.addEventListener("DOMLoaded",function(){e.play()},{once:!0})},i.initPlayer=function(e){var t=this;this.toLoad++;var i=this.getAttributes(e);e.player=lottie.loadAnimation({container:e,renderer:i.renderer,loop:i.loop&&!i.reverse,autoplay:!1,path:i.root}),void 0!==i.subframe&&e.player.setSubframe(i.subframe),e.classList.add("lg-lottie"),this.setPlayerStateClasses(e,!1),i.autoplay&&this.toAutoplay.push(e),i.required&&this.requireds++,i.scroll?e.addEventListener("scrollprogress",this.onScrollProgress):i.loop&&e.player.addEventListener("enterFrame",function(){if(e.player.totalFrames>0){var n=Math.round(e.player.currentFrame);1===e.player.playDirection?n===e.player.totalFrames-1&&(e.player.pause(),this.luge.ticker.nextTick(i.reverse?function(){e.player.setDirection(-1),e.player.goToAndPlay(e.player.totalFrames,!0),t.setPlayerStateClasses(e,"backward")}:function(){e.player.goToAndPlay(i.loopFrame,!0)},this)):n===i.loopFrame&&(e.player.pause(),this.luge.ticker.nextTick(function(){e.player.setDirection(1),e.player.goToAndPlay(i.loopFrame,!0),t.setPlayerStateClasses(e,"forward")},this))}}),e.play=this.play.bind(this,e),e.pause=this.pause.bind(this,e),e.stop=this.stop.bind(this,e),e.player.addEventListener("DOMLoaded",function(){e.classList.add("is-loaded"),t.playerLoaded(i.required)},{once:!0})},i.setPlayerStateClasses=function(e,t){e.classList.remove("is-playing","is-playing-forward","is-playing-backward","is-paused"),t?(e.classList.add("is-playing"),e.classList.add("backward"===t?"is-playing-backward":"is-playing-forward")):e.classList.add("is-paused")},i.playerLoaded=function(e){var t=this;void 0===e&&(e=!1),this.toLoad--,e&&this.requireds--,0===this.requireds&&"function"==typeof this.doneLoad&&(this.doneLoad(),this.doneLoad=null),0===this.toLoad&&this.luge.ticker.nextTick(function(){t.luge.emitter.emit("resize")})},i.play=function(e){e&&e.player&&(e.player.play(),this.setPlayerStateClasses(e,"forward"))},i.pause=function(e){e&&e.player&&(e.player.pause(),this.setPlayerStateClasses(e,!1))},i.stop=function(e){e&&e.player&&(e.player.stop(),this.setPlayerStateClasses(e,!1))},i.onScrollProgress=function(e){var t=e.target;t.player.goToAndStop(t.player.totalFrames*t.scrollProgress,!0)},t}(c),S=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"mouse")||this).luge=t,i.elements=[],i.mouse={x:window.mouseX,y:window.mouseY},window.mouseSpeed=0,i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this)),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.getMouseMovement(),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,inertia:[String,this.luge._settings.mouse.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.inertia){var n=i.inertia.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.inertia=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.inertia),i.inertia=Math.max(Math.min(i.inertia,.99),0)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.addElements=function(){var e=document.querySelectorAll("[data-lg-mouse]"),t=this;e.forEach(function(e){t.addElement(e)})},i.addElement=function(e){this.elements.includes(e)||(this.getAttributes(e),this.luge.mouseobserver.add(e),e.luge.mouse.smoothX=0,e.luge.mouse.smoothY=0,e.luge.mouse.smoothProgressX=0,e.luge.mouse.smoothProgressY=0,this.elements.push(e))},i.removeElement=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.getMouseMovement=function(){var e=this.mouse.x-window.mouseX,t=this.mouse.y-window.mouseY,i=Math.hypot(e,t);if(window.mouseSpeed+=.5*(i-window.mouseSpeed),window.mouseSpeed<.001&&(window.mouseSpeed=0),i>1){var n=Math.atan2(t,e)*(180/Math.PI)+180;window.mouseAngle=n,window.mouseDirection=n>=45&&n<135?"down":n>=135&&n<225?"left":n>=225&&n<315?"up":"right"}this.mouse={x:window.mouseX,y:window.mouseY},setTimeout(this.getMouseMovement.bind(this),20)},i.tick=function(){this.elements.forEach(function(e){var t=e.luge.mouse;if(t.x)if(t.inertia){t.smoothX+=(t.x-t.smoothX)*t.inertia,t.smoothY+=(t.y-t.smoothY)*t.inertia,t.smoothProgressX+=(t.progressX-t.smoothProgressX)*t.inertia,t.smoothProgressY+=(t.progressY-t.smoothProgressY)*t.inertia,e.style.setProperty("--mouse-x",t.smoothX),e.style.setProperty("--mouse-y",t.smoothY),e.style.setProperty("--mouse-progress-x",t.smoothProgressX),e.style.setProperty("--mouse-progress-y",t.smoothProgressY);var i=Math.round(1e3*(t.x-t.smoothX))/1e3,n=Math.round(1e3*(t.y-t.smoothY))/1e3;e.style.setProperty("--abs-diff-x",Math.abs(i)),e.style.setProperty("--diff-x",i),e.style.setProperty("--abs-diff-y",Math.abs(n)),e.style.setProperty("--diff-y",n)}else e.style.setProperty("--mouse-x",t.x),e.style.setProperty("--mouse-y",t.y),e.style.setProperty("--mouse-progress-x",t.progressX),e.style.setProperty("--mouse-progress-y",t.progressY)})},t}(c),P=/*#__PURE__*/function(e){function t(t){var i;return(i=e.call(this,"parallax")||this).luge=t,i.elements=[],i.onScrollProgress=i.onScrollProgress.bind(h(i)),i}u(t,e);var i=t.prototype;return i.init=function(){e.prototype.init.call(this),this.luge.lifecycle.add("pageInit",this.pageInit.bind(this),30),this.luge.lifecycle.add("pageKill",this.pageKill.bind(this)),this.luge.ticker.add(this.tick,this),this.bindEvents()},i.setAttributes=function(){this.pluginAttributes={root:String,disable:String,amplitude:[String,1],anchor:String,inertia:[String,this.luge._settings.parallax.inertia]}},i.getAttributes=function(t){var i=e.prototype.getAttributes.call(this,t);if(i.amplitude){var n=i.amplitude.match(/\{\s*([0-9]*[.]?[0-9]*)\s*,\s*([0-9]*[.]?[0-9]*)\s*\}/m);i.amplitude=n?Number(n[1])+(Number(n[2])-Number(n[1]))*Math.random():Number(i.amplitude)}return i},i.bindEvents=function(){this.luge.emitter.on("update",this.updateHandler,this)},i.updateHandler=function(){this.addElements()},i.pageInit=function(e){this.addElements(),e()},i.pageKill=function(e){var t=this;this.elements.forEach(function(e){t.removeElement(e)}),e()},i.addElements=function(){var e=this;document.querySelectorAll("[data-lg-parallax]").forEach(function(t){var i=e.getAttributes(t).disable,n=!0,s=(e.luge.browser||{}).is;i&&s&&("desktop"===i&&s("desktop")||"handheld"===i&&!s("desktop")||"mobile"===i&&s("mobile")||"tablet"===i&&s("tablet"))&&(n=!1),n&&e.addElement(t)})},i.addElement=function(e){var t=this;this.elements.includes(e)||(this.luge.scrollobserver.add(e),"child"===e.luge.parallax.root&&(e.style.overflow="hidden",e.luge.parallax.child=e.firstElementChild),e.luge.parallax.movement=0,e.luge.parallax.smoothMovement=0,this.elements.push(e),this.luge.ticker.nextTick(function(){e.addEventListener("scrollprogress",t.onScrollProgress),t.moveElement(e)}))},i.removeElement=function(e){e.removeEventListener("scrollprogress",this.onScrollProgress),this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1)},i.onScrollProgress=function(e){this.moveElement(e.target)},i.moveElement=function(e){var t=0;t=e.scrollStart<0?e.scrollProgress:1-2*e.scrollProgress,"bottom"===e.luge.parallax.anchor?t+=1:"top"===e.luge.parallax.anchor&&(t-=1),e.luge.parallax.movement="child"===e.luge.parallax.root?5*e.luge.parallax.amplitude*t:e.clientHeight*t*e.luge.parallax.amplitude/2},i.tick=function(){this.elements.forEach(function(e){e.luge.parallax.smoothMovement+=(e.luge.parallax.movement-e.luge.parallax.smoothMovement)*e.luge.parallax.inertia,"child"===e.luge.parallax.root&&e.luge.parallax.child?e.luge.parallax.child.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"%, 0) scale(1."+String(Math.abs(e.luge.parallax.amplitude)).replace(".","")+")":e.style.transform="translate3d(0, "+e.luge.parallax.smoothMovement+"px, 0)"})},t}(c),T=new(/*#__PURE__*/function(){function e(){this.elements=[],l.add("siteInit",this.init.bind(this),20)}var t=e.prototype;return t.init=function(e){this.createObserver(),e()},t.createObserver=function(){this.observer=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:[a.settings.intersection.threshold]})},t.intersectionCallback=function(e){e.forEach(function(e){var t=e.target,i="in";e.isIntersecting||(i=e.boundingClientRect.y<=0?"above":"under"),t.luge.viewport.position!==i&&(t.luge.viewport.position=i,t.dispatchEvent(new CustomEvent("viewportintersect")),"in"===i?t.dispatchEvent(new CustomEvent("viewportin")):(t.dispatchEvent(new CustomEvent("viewportout")),t.dispatchEvent(new CustomEvent("viewport"+i))))})},t.add=function(e){this.observer.observe(e),(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,{viewport:{position:"out"}}))},t.remove=function(e){this.observer.unobserve(e)},e}()),x=new(/*#__PURE__*/function(){function e(){this.callbacks=[],this.onceCallbacks=[],a.settings.ticker.external||(this.fps=60,this.fpsInterval=1e3/this.fps,this.lastTickTime=null,requestAnimationFrame(this._tick.bind(this)))}var t=e.prototype;return t.add=function(e,t){var i=!1;this.callbacks.forEach(function(n){n.cb===e&&n.context===t&&(i=!0)}),i||this.callbacks.push({cb:e,context:t})},t.remove=function(e,t){var i=this;this.callbacks.forEach(function(n,s){n.cb===e&&n.context===t&&delete i.callbacks[s]})},t.nextTick=function(e,t){this.onceCallbacks.push({cb:e,context:t})},t._tick=function(e){var t=e-this.lastTickTime;t>this.fpsInterval&&(this.tick(e),this.lastTickTime=e-t%this.fpsInterval),a.settings.ticker.external||requestAnimationFrame(this._tick.bind(this))},t.tick=function(e){var t=this;this.callbacks.forEach(function(t){t.cb.apply(t.context,[e])}),this.onceCallbacks.forEach(function(i,n){i.cb.apply(i.context,[e]),delete t.onceCallbacks[n]})},e}()),k=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.timeouts={scroll:null},l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),x.add(this.tick,this),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("mouseMove",this.mouseHandler,this),r.on("resize",this.resizeHandler,this),r.on("update",this.updateHandler,this),r.on("scroll",this.scrollHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],e()},t.init=function(e){this.getBoundingThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle()},this)},t.scrollHandler=function(){clearTimeout(this.timeouts.scroll),this.timeouts.scroll=setTimeout(this.getBoundingThrottle.bind(this),75)},t.mouseHandler=function(){var e=this;this.elements.forEach(function(t){e.setElementPosition(t)}),window.mouseLastScrollTop=window.scrollTop},t.getBoundingThrottle=function(){this.elementsToBound=this.elements,x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t),e.setElementPosition(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect(),n={anchor:{x:i.left,y:i.top+window.unifiedScrollTop},width:e.offsetWidth,height:e.offsetHeight};(e.luge||(e.luge={}))&&(e.luge=o.mergeDeep(e.luge,n)),e.setAttribute("style",t)},t.setElementPosition=function(e){if(e.luge&&e.luge.anchor){var t={x:window.mouseX-e.luge.anchor.x,y:window.mouseY-e.luge.anchor.y+window.unifiedScrollTop};t.progressX=o.clamp(t.x/e.luge.width,0,1),t.progressY=o.clamp(t.y/e.luge.height,0,1),e.luge.mouse=o.mergeDeep(e.luge.mouse,t)}},t.add=function(e){this.elements.includes(e)||(this.elementsToBound.includes(e)||this.elementsToBound.push(e),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1)},t.tick=function(){var e=this;0!=window.scrollTop-window.mouseLastScrollTop&&this.elements.forEach(function(t){e.setElementPosition(t)})},e}()),A=new(/*#__PURE__*/function(){function e(){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],this.setMaxScrollTop(),l.add("pageKill",this.pageKill.bind(this)),l.add("pageInit",this.init.bind(this),20),this.bindEvents()}var t=e.prototype;return t.bindEvents=function(){r.on("resize",this.resizeHandler,this),r.on("scroll",this.scrollHandler,this),r.on("update",this.updateHandler,this)},t.pageKill=function(e){this.elements=[],this.elementsToBound=[],this.elementsToCheck=[],e()},t.init=function(e){this.getBoundingThrottle(),this.checkElementsThrottle(),e()},t.resizeHandler=function(){this.getBoundingThrottle(),this.checkElementsThrottle()},t.scrollHandler=function(){this.checkElementsThrottle()},t.updateHandler=function(){var e=this;x.nextTick(function(){e.getBoundingThrottle(),e.checkElementsThrottle()},this)},t.setMaxScrollTop=function(){window.maxScrollTop=Math.max(document.body?document.body.scrollHeight:0,document.body?document.body.offsetHeight:0,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)-window.innerHeight},t.getBoundingThrottle=function(){var e=this;this.setMaxScrollTop(),this.elements.forEach(function(t){e.elementsToBound.includes(t)||(t.scrollProgress=0,e.elementsToBound.push(t))}),x.nextTick(this.getBounding.bind(this))},t.getBounding=function(){var e=this;this.elementsToBound.forEach(function(t){e.setElementBounding(t)}),this.elementsToBound=[]},t.setElementBounding=function(e){var t=e.getAttribute("style");e.setAttribute("style","");var i=e.getBoundingClientRect();e.scrollStart=i.top+window.unifiedScrollTop-window.innerHeight,e.scrollEnd=e.scrollStart+e.clientHeight+window.innerHeight,e.scrollEnd=Math.min(e.scrollEnd,window.maxScrollTop),e.scrollMiddle=e.scrollStart+(e.scrollEnd-e.scrollStart)/2,e.setAttribute("style",t)},t.checkElementsThrottle=function(){var e=this;this.elements.forEach(function(t){e.elementsToCheck.includes(t)||e.elementsToCheck.push(t)}),x.nextTick(this.checkElements.bind(this))},t.checkElements=function(){var e=this;this.elementsToCheck.forEach(function(t){e.checkElement(t)}),this.elementsToCheck=[]},t.checkElement=function(e){var t,i=window.unifiedScrollTop,n=0;n=e.scrollStart<0?Math.min(Math.max(i/e.scrollEnd,0),1):Math.min(Math.max((i-e.scrollStart)/(e.scrollEnd-e.scrollStart),0),1),isNaN(n)&&(n=0),t=n<=0&&e.scrollStart>0?"under":n>=1&&e.scrollEnd0&&n<1&&e.dispatchEvent(new CustomEvent("scrollprogress"))},t.add=function(e){this.elements.includes(e)||(e.scrollProgress=0,this.elementsToBound.includes(e)||(this.elementsToBound.push(e),this.elementsToCheck.push(e)),this.elements.push(e))},t.remove=function(e){this.elements.includes(e)&&this.elements.splice(this.elements.indexOf(e),1),this.elementsToBound.includes(e)&&this.elementsToBound.splice(this.elementsToBound.indexOf(e),1),this.elementsToCheck.includes(e)&&this.elementsToCheck.splice(this.elementsToCheck.indexOf(e),1)},e}()),L=new(/*#__PURE__*/function(){function e(){this.plugins={},this.emitter={emit:r.emit.bind(r),off:r.off.bind(r),on:r.on.bind(r),once:r.once.bind(r)},this.viewportobserver={add:T.add.bind(T),remove:T.remove.bind(T)},this.lifecycle={add:l.add.bind(l),refresh:l.cycle.bind(l,"refresh"),remove:l.remove.bind(l),debug:l.enableDebug.bind(l),_cycle:l.cycle.bind(l)},this.mouseobserver={add:k.add.bind(k),remove:k.remove.bind(k)},this.scrollobserver={add:A.add.bind(A),remove:A.remove.bind(A)},this.ticker={add:x.add.bind(x),nextTick:x.nextTick.bind(x),remove:x.remove.bind(x),tick:x.tick.bind(x)},this.settings=a.setSettings.bind(a)}var t,i,n=e.prototype;return n.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l.cycle.bind(l,"load"),{once:!0}):this.ticker.nextTick(function(){l.cycle("load")},null)},n.addPlugin=function(e,t){this.plugins[e]=new t(this)},t=e,(i=[{key:"_settings",get:function(){return a.settings}}])&&function(e,t){for(var i=0;i {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (window.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import {\n Preloader,\n Reveal,\n Transition,\n ScrollAnimation,\n SmoothScroll,\n Cursor,\n Intersection,\n LottiePlayer,\n MouseAnimation,\n Parallax,\n Browser,\n Luge\n} from './luge'\n\nconst luge = new Luge()\n\nluge.addPlugin('preloader', Preloader)\nluge.addPlugin('reveal', Reveal)\nluge.addPlugin('transition', Transition)\nluge.addPlugin('scroll', ScrollAnimation)\nluge.addPlugin('smooth', SmoothScroll)\nluge.addPlugin('cursor', Cursor)\nluge.addPlugin('intersection', Intersection)\nluge.addPlugin('lottie', LottiePlayer)\nluge.addPlugin('mouse', MouseAnimation)\nluge.addPlugin('parallax', Parallax)\nluge.addPlugin('browser', Browser)\n\nluge.settings({\n cursor: {\n disabled: luge.browser.some(['tablet', 'mobile'])\n },\n smooth: {\n disabled: luge.browser.some(['tablet', 'mobile']) || luge.browser.satisfies({ safari: '<=12' })\n }\n})\n\nluge.init()\n\nwindow.luge = luge\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","plugins","readyState","addPlugin","get","Preloader","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","some","satisfies","safari"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"luge.umd.js","sources":["../src/js/luge/core/Helpers.js","../src/js/luge/core/Emitter.js","../src/js/luge/core/LifeCycle.js","../src/js/luge/core/Core.js","../src/js/luge/core/Plugin.js","../src/js/luge/plugins/Preloader.js","../src/js/luge/plugins/Reveal.js","../src/js/luge/plugins/Transition.js","../src/js/luge/plugins/ScrollAnimation.js","../src/js/luge/plugins/SmoothScroll.js","../src/js/luge/plugins/Cursor.js","../src/js/luge/plugins/Intersection.js","../src/js/luge/plugins/LottiePlayer.js","../src/js/luge/plugins/MouseAnimation.js","../src/js/luge/plugins/Parallax.js","../src/js/luge/core/ViewportObserver.js","../src/js/luge/core/Ticker.js","../src/js/luge/core/MouseObserver.js","../src/js/luge/core/ScrollObserver.js","../src/js/luge.umd.js","../src/js/luge/core/index.js","../src/js/luge/plugins/Browser.js"],"sourcesContent":["class Helpers {\n /**\n * Check if the variable is an array\n * @param {*} item\n * @returns {Boolean}\n */\n static isArray(item) {\n return (item && typeof item === 'object' && Array.isArray(item))\n }\n\n /**\n * Check if the variable is an object\n * @param {*} item\n * @returns {Boolean}\n */\n static isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item))\n }\n\n /**\n * Check if the variable is a string\n * @param {*} item\n * @returns {Boolean}\n */\n static isString(item) {\n return (item && typeof item === 'string')\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target\n * @param {Object} source\n * @returns {Object} Merged object\n */\n static mergeDeep(target, source) {\n const output = Object.assign({}, target)\n if (Helpers.isObject(target) && Helpers.isObject(source)) {\n Object.keys(source).forEach(key => {\n if (Helpers.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n if (Helpers.isObject(target[key]) && Helpers.isObject(source[key])) {\n output[key] = Helpers.mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n return output\n }\n\n /**\n * Convert a string to camelCase\n * @param {String} string The string to convert\n */\n static toCamelCase (string) {\n if (Helpers.isString(string)) {\n return string.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) => {\n return index === 0 ? word.toLowerCase() : word.toUpperCase()\n }).replace(/\\W+/g, '')\n } else {\n return string\n }\n }\n\n /**\n * Convert a string to UpperCamelCase\n * @param {String} string The string to convert\n */\n static toUpperCamelCase (string) {\n if (Helpers.isString(string)) {\n string = Helpers.toCamelCase(string)\n\n return string.charAt(0).toUpperCase() + string.slice(1)\n } else {\n return string\n }\n }\n\n /**\n * Check if an element is still in the page's body\n * @param {HTMLElement} node\n * @returns {Boolean}\n */\n static isInPage (node) {\n return (node === document.body) ? false : document.body.contains(node)\n }\n\n /**\n * Deep freeze an object\n * @param {Object} obj\n * @returns {Object} freezed object\n */\n static deepFreeze(obj) {\n Object.keys(obj).forEach(prop => {\n if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])\n })\n return Object.freeze(obj)\n }\n\n /**\n * Clamp x between lower and upper\n * @param {Number} x\n * @param {Number} lower\n * @param {Number} upper\n * @returns {Number} clamped Number\n */\n static clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n}\n\nexport default Helpers\n","class Emitter {\n /**\n * Constructor\n */\n constructor () {\n this.events = []\n }\n\n /**\n * Attach handler to event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n * @param {Boolean} once Call handler only once\n */\n on (name, callback, context, once = false) {\n (this.events[name] || (this.events[name] = [])).push({\n cb: callback,\n context: context,\n once: once\n })\n }\n\n /**\n * Single event handler\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {Object} context Context\n */\n once (name, callback, context) {\n this.on(name, callback, context, true)\n }\n\n /**\n * Emit event\n * @param {String} name Event Name\n */\n emit (name) {\n const self = this\n const data = [].slice.call(arguments, 1)\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n object.cb.apply(object.context, data)\n\n if (object.once) {\n delete self.events[name][index]\n }\n })\n }\n }\n\n /**\n * Detact handler from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n */\n off (name, callback) {\n const self = this\n\n if (this.events[name]) {\n this.events[name].forEach((object, index) => {\n if (object.cb === callback) {\n delete self.events[name][index]\n }\n })\n }\n }\n}\n\nexport default new Emitter()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass LifeCycle {\n /**\n * Constructor\n */\n constructor () {\n this.eventsName = [\n 'siteInit',\n 'pageInit',\n 'siteLoad',\n 'pageLoad',\n 'siteIn',\n 'pageIn',\n 'reveal',\n 'pageFetch',\n 'pageOut',\n 'pageCreate',\n 'pageKill',\n 'siteReload'\n ]\n\n this.events = {}\n\n this.eventsName.forEach(eventName => {\n this.events[eventName] = {\n callbacks: [],\n done: 0\n }\n })\n\n this.cycles = {\n load: {\n events: [\n 'siteInit',\n 'pageInit',\n ['siteLoad', 'pageLoad'],\n 'siteIn',\n 'pageIn',\n 'reveal'\n ]\n },\n reload: {\n events: [\n 'pageOut',\n 'siteReload'\n ]\n },\n transition: {\n events: [\n ['pageFetch', 'pageOut'],\n 'pageCreate',\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n },\n refresh: {\n events: [\n 'pageKill',\n 'pageInit',\n 'pageLoad',\n 'pageIn',\n 'reveal'\n ]\n }\n }\n\n this.debug = false\n }\n\n /**\n * Start a cycle\n * @param {String} cycleName Cycle name\n */\n cycle (cycleName) {\n if (this.cycles[cycleName]) {\n this.cycles[cycleName].current = 0\n\n if (this.debug) {\n console.log('Start cycle: ' + cycleName)\n }\n\n for (const eventName in this.events) {\n this.events[eventName].done = 0\n }\n\n this.proceed(cycleName)\n }\n }\n\n /**\n * Proceed current cycle event\n * @param {String} cycleName Cycle name\n */\n proceed (cycleName) {\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n // Do current event\n if (Array.isArray(event)) {\n event.forEach(eventName => {\n this.do(cycleName, eventName)\n })\n } else {\n this.do(cycleName, event)\n }\n } else {\n // Cycle ended\n if (this.debug) {\n console.log(cycleName + ' cycle ended')\n }\n }\n }\n\n /**\n * Move to next cycle event\n * @param {String} cycleName Cycle name\n */\n next (cycleName) {\n const self = this\n const events = this.cycles[cycleName].events\n const current = this.cycles[cycleName].current\n\n if (current < events.length) {\n const event = events[current]\n\n let next = true\n let wait = []\n\n // Get events to wait for\n if (typeof event === 'string') {\n wait = Array(event)\n } else {\n wait = event\n }\n\n // Check if all events are done\n if (wait.length > 1) {\n wait.forEach(eventName => {\n if (self.events[eventName].done === 0 || self.events[eventName].done < self.events[eventName].callbacks.length) {\n next = false\n }\n })\n }\n\n if (next) {\n // Proceed to next event\n this.cycles[cycleName].current++\n requestAnimationFrame(this.proceed.bind(this, cycleName))\n } else {\n // Wait for all events to be done\n }\n }\n }\n\n /**\n * Hook callback to event\n * @param {String} eventName Event name\n * @param {Function} callback Callback function\n * @param {Int} position Execution order\n * @param {String} cycleName Cycle name\n */\n add (eventName, callback, position = 10, cycleName = null) {\n if (this.events[eventName]) {\n this.events[eventName].callbacks.push({\n callback: callback,\n position: position,\n cycle: cycleName\n })\n }\n }\n\n /**\n * Detach callback from event\n * @param {String} name Event name\n * @param {Function} callback Handler function\n * @param {String} cycleName Cycle name\n */\n remove (eventName, callback, cycleName = null) {\n const self = this\n\n if (this.events[eventName]) {\n this.events[eventName].callbacks.forEach((event, index) => {\n if (event.callback === callback && event.cycle === cycleName) {\n delete self.events[eventName].callbacks[index]\n }\n })\n }\n }\n\n /**\n * Call hooked callbacks\n * @param {String} cycleName Cycle name\n * @param {String} eventName Event name\n */\n do (cycleName, eventName) {\n this.events[eventName].done = 0\n\n // Call hooked callbacks\n if (this.events[eventName].callbacks.length > 0) {\n if (this.debug) {\n console.log('Do event: ' + eventName + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('before-' + eventName))\n\n const callbacks = this.events[eventName].callbacks.sort((a, b) => {\n return a.position - b.position\n })\n\n callbacks.forEach(object => {\n if (object.cycle === null || object.cycle === cycleName) {\n object.callback(() => this.done(cycleName, eventName))\n } else {\n this.done(cycleName, eventName)\n }\n })\n } else {\n this.done(cycleName, eventName)\n }\n }\n\n /**\n * Count done action\n * @param {String} eventName Event name\n */\n done (cycleName, eventName) {\n this.events[eventName].done++\n\n if (this.debug) {\n console.log('Done event: ' + eventName + ' ' + this.events[eventName].done + '/' + this.events[eventName].callbacks.length + ' (' + cycleName + ' cycle)')\n }\n\n Emitter.emit(Helpers.toCamelCase('after-' + eventName))\n\n // All callback are done, call next action\n if (this.events[eventName].done >= this.events[eventName].callbacks.length) {\n this.next(cycleName, eventName)\n }\n }\n\n /**\n * Enable debug\n * @param {Boolean} value Enable debug\n */\n enableDebug (value = true) {\n this.debug = value\n }\n}\n\nexport default new LifeCycle()\n","import LifeCycle from './LifeCycle'\nimport Emitter from './Emitter'\nimport Helpers from './Helpers'\n\nclass Luge {\n /**\n * Constructor\n */\n constructor () {\n // Options\n this.settings = Helpers.deepFreeze({\n cursor: {\n inertia: 1,\n trailLength: 10\n },\n intersection: {\n threshold: 0.3\n },\n lottie: {\n renderer: 'svg',\n subFrame: true\n },\n mouse: {\n inertia: 0.1\n },\n parallax: {\n inertia: 0.1\n },\n preloader: {\n duration: 0\n },\n reveal: {\n stagger: 0.1,\n threshold: 0.15\n },\n scroll: {\n inertia: 0.1\n },\n smooth: {\n inertia: 0.1\n },\n ticker: {\n external: false\n },\n transition: {\n reload: false\n },\n credits: {\n show: true\n }\n })\n\n // Timeouts\n this.timeouts = {\n resizeThrottle: null,\n scrollEnd: null\n }\n\n // Viewport size\n this.windowWidth = 1\n this.windowHeight = 1\n this.clientWidth = 1\n\n // Scroll\n window.scrollTop = window.scrollY\n window.unifiedScrollTop = window.scrollTop\n window.maxScrollTop = 1\n window.scrollProgress = 0\n this.previousScrollTop = window.scrollY\n this.isScrolling = false\n\n // Mouse\n window.mouseX = -1\n window.mouseY = -1\n window.mouseLastScrollTop = 0\n\n LifeCycle.add('siteInit', this.siteInit.bind(this), 999)\n\n this.bindEvents()\n }\n\n /**\n * Set settings\n */\n setSettings (settings) {\n this.settings = Helpers.deepFreeze(Helpers.mergeDeep(this.settings, settings))\n }\n\n /**\n * Site initialization\n * @param {Function} done Done function\n */\n siteInit (done) {\n this.showCredits()\n\n this.setCSSProperties()\n\n this.scrollHandler()\n\n done()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n window.addEventListener('mousemove', this.mouseHandler.bind(this), { passive: true })\n window.addEventListener('resize', this.resizeThrottle.bind(this))\n window.addEventListener('scroll', this.scrollHandler.bind(this), { passive: true })\n }\n\n /**\n * Mouse handler\n * @param {Event} e Mouse event\n */\n mouseHandler (e) {\n const mouseX = e.pageX\n const mouseY = e.pageY - window.scrollTop\n\n window.mouseX = mouseX\n window.mouseY = mouseY\n\n Emitter.emit('mouseMove', e)\n }\n\n /**\n * Resize throttle\n */\n resizeThrottle () {\n clearTimeout(this.timeouts.resizeThrottle)\n this.timeouts.resizeThrottle = setTimeout(this.resizeHandler.bind(this), 200)\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.setCSSProperties()\n\n Emitter.emit('resize')\n }\n\n /**\n * Set CSS propertiers\n */\n setCSSProperties () {\n // Pass window widths to CSS\n const newWidth = window.innerWidth\n if (this.windowWidth !== newWidth) {\n this.windowWidth = newWidth\n this.clientWidth = document.body.clientWidth\n }\n\n // Pass window height to CSS\n const newHeight = window.innerHeight\n if (this.windowHeight !== newHeight) {\n this.windowHeight = newHeight\n this.clientHeight = document.body.clientHeight\n }\n\n requestAnimationFrame(() => {\n document.documentElement.style.setProperty('--vw', (this.windowWidth * 0.01) + 'px')\n document.documentElement.style.setProperty('--cw', (this.clientWidth * 0.01) + 'px')\n\n document.documentElement.style.setProperty('--vh', (this.windowHeight * 0.01) + 'px')\n document.documentElement.style.setProperty('--ch', (this.clientHeight * 0.01) + 'px')\n })\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n window.scrollTop = window.scrollY\n\n // Backward compatibility\n window.unifiedScrollTop = window.scrollTop\n\n if (!this.isScrolling) {\n this.scrollStart()\n }\n\n clearTimeout(this.timeouts.scrollEnd)\n this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200)\n\n this.previousScrollTop = window.scrollTop\n window.scrollProgress = window.scrollTop / window.maxScrollTop\n\n Emitter.emit('scroll')\n }\n\n /**\n * Scroll start\n */\n scrollStart () {\n this.isScrolling = true\n\n document.documentElement.classList.add('is-scrolling')\n\n Emitter.emit('scrollStart')\n }\n\n /**\n * Scroll end\n */\n scrollEnd () {\n this.isScrolling = false\n\n document.documentElement.classList.remove('is-scrolling')\n\n Emitter.emit('scrollEnd')\n }\n\n /**\n * Show credits\n */\n showCredits () {\n if (this.settings.credits.show) {\n // Output version\n const consoleBaseStyle = 'background-color: #00FFE5; color: black; font: 400 1em monospace; padding: 0.5em 0; '\n const consoleBoldStyle = consoleBaseStyle + 'font-weight: bold; '\n const consoleWhiteStyle = 'color: black; font: 400 1em monospace; padding: 0.5em 0; '\n\n console.log('%c powered by %cluge%c / ' + VERSION + ' %c > https://luge.cool ', consoleBaseStyle, consoleBoldStyle, consoleBaseStyle, consoleWhiteStyle)\n }\n }\n}\n\nexport default new Luge()\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nexport default class Plugin {\n /**\n * Constructor\n */\n constructor (slug) {\n this.pluginSlug = slug\n\n LifeCycle.add('siteInit', this.beforeInit.bind(this), 5)\n }\n\n /**\n * Before init\n */\n beforeInit (done) {\n this.isDisabled = this.disabled()\n\n if (this.isDisabled) {\n document.documentElement.classList.add('lg-' + this.pluginSlug + '-disabled')\n } else {\n this.init()\n }\n\n done()\n }\n\n /**\n * Init plugin\n */\n init () {\n this.setAttributes()\n }\n\n /**\n * Check if feature is disabled\n */\n disabled () {\n return !!(Luge.settings[this.pluginSlug] || {}).disabled\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {}\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const attributes = this.pluginAttributes\n const data = {}\n\n for (const name in attributes) {\n const attribute = attributes[name]\n let attributeKey = 'lg-' + this.pluginSlug\n if (name !== 'root') {\n attributeKey += '-' + name\n }\n\n attributeKey = Helpers.toCamelCase(attributeKey)\n const attributeValue = element.dataset[attributeKey]\n\n let type, value, defaultValue\n\n if (typeof attribute === 'object') {\n type = attribute[0]\n defaultValue = attribute[1]\n } else {\n type = attribute\n }\n\n if (attributeValue === undefined && defaultValue !== undefined) {\n value = type(defaultValue)\n } else if (attributeValue === undefined && type === Boolean) {\n value = false\n } else if (attributeValue !== undefined) {\n if (type === Boolean) {\n value = (attributeValue !== 'false')\n } else {\n value = type(attributeValue)\n }\n } else {\n value = undefined\n }\n\n data[name] = value\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge[this.pluginSlug] = data\n }\n\n return data\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class PreLoader extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('preloader')\n\n this.luge = luge\n\n this.intro = false\n this.playerIn = false\n this.startTime = Date.now()\n this.doneLoad = null\n\n luge.preloader = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.el = document.querySelector('[data-lg-preloader]')\n\n if (this.el) {\n this.attributes = this.getAttributes(this.el)\n\n this.el.classList.add('lg-preloader', 'lg-preloader--' + this.attributes.root)\n\n this.initLottie()\n\n this.luge.lifecycle.add('siteIn', this.siteIn.bind(this))\n }\n\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: [String, ''],\n duration: [Number, this.luge._settings.preloader.duration],\n in: String,\n reverse: Boolean\n }\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n if (this.attributes && this.attributes.root === 'lottie' && typeof lottie === 'object') {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Intro animation\n * @param {Function} done Done function\n */\n siteIn (done) {\n const elapsed = (Date.now() - this.startTime) / 1000\n const remaining = this.attributes.duration - elapsed\n\n if (remaining <= 0) {\n const clear = this.clear.bind(this, done)\n\n if (this.playerIn) {\n this.playerIn.play()\n\n this.playerIn.addEventListener('complete', clear, { once: true })\n } else {\n if (typeof this.intro === 'function') {\n this.intro(done, this.remove.bind(this))\n } else {\n const duration = window.getComputedStyle(this.el).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n this.el.addEventListener('transitionend', clear, { once: true })\n this.el.classList.add('is-hidden')\n } else {\n clear()\n }\n }\n }\n } else {\n setTimeout(this.siteIn.bind(this, done), remaining * 1000)\n }\n }\n\n /**\n * Clear preloader\n * @param {Function} done Done callback\n */\n clear (done) {\n if (this.playerIn) {\n this.playerIn.destroy()\n }\n\n this.remove()\n\n done()\n }\n\n /**\n * Remove preloader from done\n */\n remove (done) {\n this.el.parentNode.removeChild(this.el)\n this.el = null\n }\n\n /**\n * Add intro animation\n * @param {Function} callback Callback function\n */\n add (callback) {\n this.intro = callback\n }\n\n /**\n * Init lottie\n */\n initLottie () {\n const self = this\n\n if (this.attributes.root === 'lottie' && typeof lottie === 'object') {\n const animIn = this.attributes.in\n let playerIn = false\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: this.el,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (this.attributes.reverse) {\n playerIn.setDirection(-1)\n }\n }\n\n playerIn.addEventListener('DOMLoaded', () => {\n if (self.attributes.reverse) {\n playerIn.goToAndStop(playerIn.totalFrames - 1, true)\n }\n\n self.el.setAttribute('style', '')\n\n if (typeof self.doneLoad === 'function') {\n self.doneLoad()\n self.doneLoad = null\n }\n }, { once: true })\n\n this.playerIn = playerIn\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Reveal extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('reveal')\n\n this.luge = luge\n\n this.elements = []\n this.toRevealIn = []\n this.toRevealOut = []\n\n this.reveals = {\n in: {},\n out: {}\n }\n this.canReveal = false\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.reveal = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 11)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n super.setAttributes()\n\n this.pluginAttributes = {\n root: String,\n stagger: String,\n manual: [Boolean, false],\n multiple: Boolean,\n delay: [Number, 0]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.stagger !== undefined && data.stagger === '') {\n data.stagger = this.luge._settings.reveal.stagger\n } else if (data.stagger === undefined) {\n data.stagger = false\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('resize', this.resizeHandler, this)\n this.luge.emitter.on('scroll', this.scrollHandler, this)\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-reveal]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n // Don't add child elements\n if (!attributes.stagger && element.closest('[data-lg-reveal-stagger]') !== null) {\n return\n }\n\n const revealName = attributes.root\n element.luge.reveal.name = Helpers.toCamelCase(revealName)\n\n if (!attributes.manual) {\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else {\n element.luge.reveal.in = () => {\n this.revealCallback(element, element.luge.reveal.name, 'in')\n this.setRevealClasses(element, 'is-in')\n }\n\n element.luge.reveal.out = () => {\n this.revealCallback(element, element.luge.reveal.name, 'out')\n this.setRevealClasses(element, 'is-out')\n }\n }\n\n element.luge.reveal.delay = attributes.delay * 1000\n\n if (attributes.stagger) {\n Array.from(element.children).forEach(child => {\n const childRevealName = child.dataset.lgReveal\n\n child.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n child.style.transition = ''\n })\n\n child.classList.add('lg-reveal', 'is-out')\n\n if (childRevealName || revealName) {\n child.classList.add('lg-reveal--' + (childRevealName ?? revealName))\n }\n\n child.dataset.lgRevealChild = ''\n if (child.luge || (child.luge = {})) {\n child.luge.reveal = {\n isRevealed: false\n }\n }\n })\n } else {\n element.style.transition = 'none'\n this.luge.ticker.nextTick(() => {\n element.style.transition = ''\n })\n\n element.classList.add('lg-reveal', 'is-out')\n\n if (revealName) {\n element.classList.add('lg-reveal--' + revealName)\n }\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.canReveal = false\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n const threshold = this.luge._settings.reveal.threshold\n\n if (element.scrollProgress >= threshold && element.scrollProgress <= (1 - threshold) && !element.luge.reveal.isRevealed) {\n if (this.toRevealOut.includes(element)) {\n this.toRevealOut.splice(this.toRevealOut.indexOf(element), 1)\n }\n\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n } else if ((element.scrollProgress < threshold || (element.scrollProgress > (1 - threshold) && element.scrollEnd < Math.round(window.unifiedScrollTop))) && element.luge.reveal.isRevealed) {\n if (this.toRevealIn.includes(element)) {\n this.toRevealIn.splice(this.toRevealIn.indexOf(element), 1)\n }\n\n if (!this.toRevealOut.includes(element)) {\n this.toRevealOut.push(element)\n }\n }\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.canReveal = true\n\n this.elements.forEach(element => {\n if (element.scrollStart < 0) {\n if (!this.toRevealIn.includes(element)) {\n this.toRevealIn.push(element)\n }\n }\n })\n\n this.revealElements()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.revealElements()\n }\n\n /**\n * Sroll handler\n */\n scrollHandler () {\n this.revealElements()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.revealElements()\n }\n\n /**\n * Reveal elements\n */\n revealElements () {\n const self = this\n\n if (this.canReveal) {\n let revealInTimeout = 0\n\n this.toRevealIn.forEach(element => {\n const delay = true\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n revealInTimeout += element.luge.reveal.delay\n\n setTimeout(function () {\n self.revealCallback(element, revealName, 'in')\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'in')\n }\n\n self.setRevealClasses(child, 'is-in')\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, 'is-in')\n }\n }, delay ? revealInTimeout : 0)\n\n if (delay) {\n revealInTimeout += this.luge._settings.reveal.stagger * 1000\n }\n\n if (!element.luge.reveal.multiple) {\n self.removeElement(element)\n }\n })\n\n this.toRevealOut.forEach(element => {\n const revealName = Helpers.toCamelCase(element.luge.reveal.root)\n\n if (element.luge.reveal.isRevealed !== undefined) {\n self.revealCallback(element, revealName, 'out')\n }\n\n let state = ''\n if (element.scrollProgress > 0.5) {\n state = 'is-out is-out-top'\n } else {\n state = 'is-out is-out-bottom'\n }\n\n if (element.luge.reveal.stagger) {\n Array.from(element.children).forEach((child, index) => {\n const childRevealName = Helpers.toCamelCase(child.dataset.lgReveal)\n\n setTimeout(() => {\n if (childRevealName || revealName) {\n self.revealCallback(child, (childRevealName ?? revealName), 'out')\n }\n\n self.setRevealClasses(child, state)\n }, index * element.luge.reveal.stagger * 1000)\n })\n } else {\n self.setRevealClasses(element, state)\n }\n })\n\n this.toRevealIn = []\n this.toRevealOut = []\n }\n }\n\n /**\n * Set reveal classes\n * @param {HTMLElement} el Element\n * @param {String} states Reveal states\n */\n setRevealClasses (el, states) {\n states = states.split(' ')\n\n el.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n states.forEach(state => {\n el.classList.add(state)\n })\n }\n\n /**\n * Call reveal callback\n * @param {HTMLElement} el Element\n */\n revealCallback (el, name, type) {\n el.dispatchEvent(new CustomEvent('reveal' + type))\n el.luge.reveal.isRevealed = (type === 'in')\n\n if (typeof this.reveals[type][name] === 'function') {\n this.reveals[type][name](el)\n } else if (typeof el['onreveal' + type] === 'function') {\n el['onreveal' + type]()\n }\n }\n\n /**\n * Add reveal animation\n * @param {String} type Reveal type (in | out)\n * @param {String} revealName Reveal animation name\n * @param {Function} callback Callback function\n */\n add (type, revealName, callback) {\n if (this.reveals[type]) {\n revealName = Helpers.toCamelCase(revealName)\n\n if (this.reveals[type][revealName]) {\n console.log('Reveal animation named ' + revealName + ' already exists.')\n } else {\n this.reveals[type][revealName] = callback\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nexport default class Transition extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('transition')\n\n this.luge = luge\n\n this.url = window.location.href\n this.pathname = window.location.pathname\n this.pageFetched = null\n this.currentPage = null\n this.reload = this.luge._settings.transition.reload\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.transitions = {\n in: {},\n out: {}\n }\n\n this.listeners = { linkHandler: this.linkHandler.bind(this) }\n\n luge.transition = {\n add: this.add.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n this.currentPage = document.querySelector('[data-lg-page]')\n if (this.currentPage) {\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n }\n\n this.initLoader()\n\n if (!this.reload) {\n window.addEventListener('popstate', this.historyStateChanged.bind(this))\n }\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageFetch', this.pageFetch.bind(this))\n this.luge.lifecycle.add('pageOut', this.pageOut.bind(this))\n this.luge.lifecycle.add('pageIn', this.pageIn.bind(this), 10, 'transition')\n this.luge.lifecycle.add('pageCreate', this.pageCreate.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this), 999, 'transition')\n }\n\n /**\n * Bind links event\n */\n bindLinksEvent () {\n if (document.querySelector('[data-lg-page]')) {\n document.querySelectorAll('a').forEach(el => {\n el.addEventListener('click', this.listeners.linkHandler)\n })\n }\n }\n\n /**\n * Unbind links handler\n */\n unbindLinksEvent () {\n document.querySelectorAll('a').forEach(el => { el.removeEventListener('click', this.listeners.linkHandler) })\n }\n\n /**\n * Link handler\n * @param {Event} e Mouse event\n */\n linkHandler (e) {\n const element = e.currentTarget\n const href = element.getAttribute('href')\n\n if (href &&\n href.indexOf('#') !== 0 &&\n href.indexOf('tel') !== 0 &&\n href.indexOf('mailto') !== 0 &&\n !element.closest('#wpadminbar') &&\n element.getAttribute('data-lg-transition') !== 'disabled' &&\n element.getAttribute('target') !== '_blank') {\n // Check if it's an internal URL\n if (href.indexOf(window.location.origin) === 0 ||\n href.indexOf('/') === 0 ||\n href.indexOf('/') === -1) {\n e.preventDefault()\n\n if (window.location.href === href) {\n return\n }\n\n this.navigateTo(href)\n\n // Change page url\n history.pushState(null, null, this.url)\n }\n }\n }\n\n /**\n * Navigate to page\n * @param {URL} url New page URL\n */\n navigateTo (url) {\n this.url = url\n\n if (this.reload) {\n // Prefetch new URL\n const prefetchLink = document.createElement('link')\n prefetchLink.rel = 'prefetch'\n prefetchLink.href = url\n document.head.appendChild(prefetchLink)\n\n // Change URL after pageOut\n this.luge.lifecycle.add('siteReload', (done) => {\n window.location = url\n })\n\n // Call cycle\n this.luge.lifecycle._cycle('reload')\n } else {\n this.luge.lifecycle._cycle('transition')\n }\n }\n\n /**\n * Page init\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.bindLinksEvent()\n\n done()\n }\n\n /**\n * Init loader\n */\n initLoader () {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n loader.style.transition = 'none'\n loader.classList.add('lg-loader', 'lg-loader--' + loader.getAttribute('data-lg-loader'))\n this.luge.ticker.nextTick(() => {\n loader.style.transition = ''\n })\n }\n\n if (loader && loader.getAttribute('data-lg-loader') === 'lottie' && typeof lottie === 'object') {\n const animOut = loader.getAttribute('data-lg-loader-out')\n let playerOut = false\n let animIn = loader.getAttribute('data-lg-loader-in')\n let playerIn = false\n\n if (animOut) {\n playerOut = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animOut,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n }\n\n if (animIn === 'reverse') {\n animIn = animOut\n }\n\n if (animIn) {\n playerIn = lottie.loadAnimation({\n container: loader,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n path: animIn,\n rendererSettings: {\n preserveAspectRatio: 'none'\n }\n })\n\n if (animIn === animOut) {\n playerIn.setDirection(-1)\n }\n }\n\n loader.playerOut = playerOut\n loader.playerIn = playerIn\n }\n }\n\n /**\n * Fetch\n * @param {Function} done Done function\n */\n pageFetch (done) {\n const self = this\n\n if (this.url) {\n fetch(this.url, { credentials: 'include' })\n .then(function (response) {\n return response.text()\n }).then(function (body) {\n self.pageFetched = body\n\n done()\n })\n }\n }\n\n /**\n * Page create\n * @param {Function} done Done function\n */\n pageCreate (done) {\n // Convert data to HTML\n const html = new DOMParser().parseFromString(this.pageFetched, 'text/html')\n\n // Get containers\n const newPage = html.querySelector('[data-lg-page]')\n\n if (newPage) {\n // Switch containers\n this.currentPage.insertAdjacentElement('beforebegin', newPage)\n\n newPage.style.opacity = 0\n\n this.currentPage.style.opacity = 0\n this.currentPage.style.position = 'absolute'\n this.currentPage.style.top = 0\n this.currentPage.style.left = '-999em'\n this.currentPage.style.width = '100%'\n\n // Switch classes\n document.querySelector('body').className = html.querySelector('body').className\n\n // Switch metas\n document.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n element.parentNode.removeChild(element)\n })\n html.querySelectorAll('meta[name=\"description\"], meta[name=\"keywords\"], meta[property=\"og:image\"]').forEach(element => {\n document.querySelector('head title').insertAdjacentElement('afterend', element)\n })\n\n // Set title\n const oldTitle = document.querySelector('head title')\n const newTitle = html.querySelector('head title')\n\n if (oldTitle && newTitle) {\n oldTitle.innerText = newTitle.innerText\n }\n } else {\n // Force reload when no page is found\n window.location = this.url\n return\n }\n\n // Reset scroll\n window.scroll({\n top: this.newScrollTop,\n left: 0,\n behavior: 'instant'\n })\n window.scrollTop = 0\n window.smoothScrollTop = 0\n window.unifiedScrollTop = 0\n\n this.prevScrollTop = 0\n this.newScrollTop = 0\n\n this.luge.emitter.emit('pageTransition', html)\n\n done()\n }\n\n /**\n * Page kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const oldPage = this.currentPage\n oldPage.parentNode.removeChild(oldPage)\n\n this.currentPage = document.querySelector('[data-lg-page]')\n this.reload = this.currentPage.hasAttribute('data-lg-reload') ? true : this.luge._settings.transition.reload\n\n done()\n }\n\n /**\n * Page out\n * @param {Function} done Done function\n */\n pageOut (done) {\n const self = this\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n if (typeof this.transitions.out[pageName] === 'function') {\n transition = this.transitions.out[pageName]\n } else if (typeof page.onpageout === 'function') {\n transition = page.onpageout\n } else if (typeof this.transitions.out.default === 'function') {\n transition = this.transitions.out.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader) {\n if (loader.playerOut) {\n loader.playerOut.stop()\n loader.playerOut.renderer.svgElement.style.opacity = 1\n loader.playerOut.play()\n\n loader.playerOut.addEventListener('complete', () => {\n if (!self.reload) {\n loader.playerOut.renderer.svgElement.style.opacity = ''\n }\n\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n }\n\n loader.classList.add('is-visible')\n } else {\n done()\n }\n }\n } else {\n done()\n }\n\n this.unbindLinksEvent.bind(this)\n }\n\n /**\n * Page in\n * @param {Function} done Done function\n */\n pageIn (done) {\n const page = document.querySelector('[data-lg-page]')\n\n if (page) {\n const pageName = Helpers.toCamelCase(page.getAttribute('data-lg-page'))\n let transition = false\n\n page.style.opacity = ''\n\n if (typeof this.transitions.in[pageName] === 'function') {\n transition = this.transitions.in[pageName]\n } else if (typeof page.onpagein === 'function') {\n transition = page.onpagein\n } else if (typeof this.transitions.in.default === 'function') {\n transition = this.transitions.in.default\n }\n\n if (transition) {\n transition(page, done)\n } else {\n const loader = document.querySelector('[data-lg-loader]')\n\n if (loader && loader.classList.contains('is-visible')) {\n if (loader.playerIn) {\n loader.playerIn.stop()\n loader.playerIn.renderer.svgElement.style.opacity = 1\n if (loader.getAttribute('data-lg-loader-in') === 'reverse') {\n loader.playerIn.goToAndPlay(loader.playerIn.totalFrames, true)\n } else {\n loader.playerIn.play()\n }\n\n loader.playerIn.addEventListener('complete', () => {\n loader.playerIn.renderer.svgElement.style.opacity = ''\n loader.classList.remove('is-visible')\n done()\n }, { once: true })\n } else {\n const duration = window.getComputedStyle(document.querySelector('[data-lg-loader]')).getPropertyValue('transition-duration')\n\n if (duration !== '' && duration !== '0s') {\n loader.addEventListener('transitionend', done, { once: true })\n } else {\n done()\n }\n\n loader.classList.remove('is-visible')\n }\n } else {\n done()\n }\n }\n } else {\n done()\n }\n }\n\n /**\n * History change\n */\n historyStateChanged () {\n let url = ''\n if (this.url.indexOf(window.location.origin) === 0) {\n url = new URL(this.url)\n } else {\n url = new URL(window.location.origin + this.url)\n }\n\n if (url.pathname !== window.location.pathname) {\n this.prevScrollTop = window.scrollY\n\n this.luge.ticker.nextTick(() => {\n this.newScrollTop = window.scrollY\n\n window.scroll({\n top: this.prevScrollTop,\n left: 0,\n behavior: 'instant'\n })\n })\n\n this.navigateTo(window.location.href)\n }\n }\n\n /**\n * Add transition animation\n * @param {String} type Transition type (in | out)\n * @param {Function} callback Callback function\n * @param {String} pageName Page name\n */\n add (type, pageName = 'default', callback) {\n if (this.transitions[type]) {\n pageName = Helpers.toCamelCase(pageName)\n\n if (this.transitions[type][pageName]) {\n console.log('Transition animation for ' + pageName + ' page already exists.')\n } else {\n this.transitions[type][pageName] = callback\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class ScrollAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('scroll')\n\n this.luge = luge\n\n this.elements = []\n\n // Properties\n this.allowedProperties = [\n 'opacity',\n 'background-x',\n 'background-y'\n ]\n\n this.transformProperties = [\n 'x',\n 'y',\n 'z',\n 'translate3d',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ'\n ]\n\n // Presets\n this.presets = {\n 'background-x': {\n 'background-x': ['0%', '100%']\n },\n 'background-y': {\n 'background-y': ['0%', '100%']\n }\n }\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n yoyo: Boolean,\n inertia: [String, this.luge._settings.scroll.inertia],\n animate: String\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-scroll]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n element.addEventListener('scrollprogress', this.onScrollProgress)\n\n // Set values\n const scrollAnimation = {}\n\n // Smooth progress\n scrollAnimation.smoothProgress = (element.scrollProgress !== undefined ? element.scrollProgress : 0)\n\n // Yoyo\n scrollAnimation.yoyo = attributes.yoyo\n\n // Inertia\n scrollAnimation.inertia = attributes.inertia\n\n // Get properties\n let properties = false\n\n if (attributes.animate !== undefined) {\n properties = JSON.parse(attributes.animate.replace(/'/g, '\"'))\n } else if (this.presets[attributes.root]) {\n properties = this.presets[attributes.root]\n }\n\n if (properties) {\n const declarations = {}\n\n for (const property in properties) {\n if (this.allowedProperties.includes(property) ||\n this.transformProperties.includes(property)) {\n const values = properties[property]\n let fromValue = String(values[0])\n let toValue = String(values[1])\n\n let unit = fromValue.match(/\\d+([a-zA-Z%]+)/m)\n if (unit) {\n unit = unit[1]\n } else if (property.indexOf('rotate') === 0) {\n unit = 'deg'\n }\n\n fromValue = Number(fromValue.replace(unit, ''))\n toValue = Number(toValue.replace(unit, ''))\n\n let safeProperty = property\n if (property === 'background-x') {\n safeProperty = 'background-position-x'\n } else if (property === 'background-y') {\n safeProperty = 'background-position-y'\n }\n\n declarations[safeProperty] = {\n from: fromValue,\n to: toValue,\n current: fromValue,\n unit: unit\n }\n }\n }\n\n scrollAnimation.properties = declarations\n }\n\n element.luge.scroll.animation = scrollAnimation\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.luge.scroll.animation.atDest = false\n }\n\n /**\n * Raf animation\n */\n tick () {\n for (const element of this.elements) {\n // Early break if at dest\n if (element.luge.scroll.animation.atDest) {\n continue\n }\n\n // Yoyo\n let progress = element.scrollProgress\n if (element.luge.scroll.yoyo) {\n progress = 1 - Math.abs(1 - progress * 2)\n }\n\n element.luge.scroll.animation.smoothProgress += (progress - element.luge.scroll.animation.smoothProgress) * (1 - element.luge.scroll.inertia)\n\n if (element.luge.scroll.animation.properties) {\n const declarations = {}\n\n for (const [key, property] of Object.entries(element.luge.scroll.animation.properties)) {\n property.current = property.from + (property.to - property.from) * element.luge.scroll.animation.smoothProgress\n\n if (['x', 'y', 'z'].includes(key)) {\n if (declarations.translate3d || (declarations.translate3d = {})) {\n declarations.translate3d[key] = property.current + property.unit\n }\n } else {\n declarations[key] = property.current + property.unit\n }\n }\n\n // Handle transform shorthand\n const transform = []\n for (const [key, property] of Object.entries(declarations)) {\n if (this.transformProperties.includes(key)) {\n // Convert object style property value to string\n if (typeof property === 'object') {\n if (key === 'translate3d') {\n const value = Object.assign({ x: 0, y: 0, z: 0 }, property)\n\n property.string = value.x + ', ' + value.y + ', ' + value.z\n } else {\n property.string = Object.values(property).join(', ')\n }\n }\n\n transform.push(key + '(' + (typeof property !== 'object' ? property : property.string) + ')')\n }\n }\n\n // Create style rule\n const styles = {}\n const willChange = []\n\n if (transform.length > 0) {\n styles.transform = transform.join(' ')\n willChange.push('transform')\n }\n\n for (const [key, property] of Object.entries(declarations)) {\n if (!this.transformProperties.includes(key)) {\n styles[key] = property\n willChange.push(key)\n }\n }\n\n for (const [key, property] of Object.entries(styles)) {\n element.style.setProperty(key, property)\n }\n\n element.style.setProperty('will-change', willChange.join(', '))\n } else {\n const diff = Math.round((element.scrollProgress - element.luge.scroll.animation.smoothProgress) * 1000) / 1000\n\n element.style.setProperty('--progress', element.luge.scroll.animation.smoothProgress)\n element.style.setProperty('--abs-diff', Math.abs(diff))\n element.style.setProperty('--diff', diff)\n }\n\n // Block future style update if element is at destination\n if (Math.abs(progress - element.luge.scroll.animation.smoothProgress) < 0.0001) {\n element.luge.scroll.animation.atDest = true\n }\n }\n }\n}\n","import Helpers from '../core/Helpers'\nimport Plugin from '../core/Plugin'\n\nimport VirtualScroll from 'virtual-scroll'\n\nexport default class SmoothScroll extends Plugin {\n /**\n * Constructor\n */\n constructor() {\n super('smooth')\n\n window.hasSmoothScroll = false\n window.isSmoothScrolling = false\n }\n\n /**\n * Init\n */\n init() {\n super.init()\n\n this.element = document.documentElement\n\n this.hasSmooth = this.element.hasAttribute('data-lg-smooth')\n\n if (this.hasSmooth) {\n window.hasSmoothScroll = true\n\n this.smoothScroll = window.scrollTop\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n\n document.documentElement.classList.add('has-smooth-scroll')\n\n const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'\n\n this.virtualScroll = new VirtualScroll({\n el: this.element,\n firefoxMultiplier: 50,\n mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,\n useKeyboard: false,\n useTouch: false,\n passive: true\n })\n\n this.virtualScroll.on(this.onVirtualScroll.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('scroll', this.onScroll, this)\n }\n\n /**\n * Scroll handler\n */\n onScroll () {\n if (!window.isSmoothScrolling) {\n this.targetScroll = window.scrollTop\n this.targetSmoothScroll = window.scrollTop\n this.smoothScroll = window.scrollTop\n }\n }\n\n /**\n * Virtual scroll handler\n */\n onVirtualScroll({ deltaY, originalEvent: e }) {\n const objects = e.composedPath()\n const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent'))\n\n if (e.ctrlKey || isPrevented) {\n return\n }\n\n this.targetScroll -= deltaY\n this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop)\n\n window.isSmoothScrolling = true\n }\n\n /**\n * Tick\n */\n tick () {\n const settings = this.luge._settings.smooth\n\n this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia\n this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia\n\n const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)\n\n if (window.isSmoothScrolling && diff > 0.5) {\n window.scrollTo(\n {\n top: this.smoothScroll,\n behavior: 'auto'\n }\n )\n } else if (window.isSmoothScrolling) {\n this.smoothScroll = this.targetSmoothScroll\n window.isSmoothScrolling = false\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Cursor extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('cursor')\n\n this.luge = luge\n\n this.cursors = []\n this.pointers = []\n this.trails = []\n\n this.hoverTags = ['a', 'button', 'input']\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [Number, this.luge._settings.cursor.inertia],\n length: [Number, this.luge._settings.cursor.trailLength],\n hide: Boolean\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n document.documentElement.addEventListener('mouseenter', this.hoverHandler.bind(this), { capture: true, passive: true })\n document.documentElement.addEventListener('mouseleave', this.hoverHandler.bind(this), { capture: true, passive: true })\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n const self = this\n const cursors = document.querySelectorAll('[data-lg-cursor]:not(.lg-cursor)')\n\n if (cursors.length > 0) {\n cursors.forEach(cursor => {\n const attributes = this.getAttributes(cursor)\n\n if (attributes.hide) {\n document.documentElement.classList.add('lg-cursor-hide')\n }\n\n // Pointers\n const pointers = cursor.querySelectorAll('[data-lg-cursor-pointer')\n pointers.forEach(pointer => {\n pointer.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n }\n }\n }\n\n if (pointer.hasAttribute('data-lg-cursor-inertia')) {\n pointer.luge.cursor.inertia = Number(pointer.getAttribute('data-lg-cursor-inertia'))\n } else {\n pointer.luge.cursor.inertia = attributes.inertia\n }\n\n pointer.classList.add('lg-cursor-pointer')\n\n self.pointers.push(pointer)\n })\n\n // Trails\n const trails = cursor.querySelectorAll('[data-lg-cursor-trail')\n trails.forEach(trail => {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n svg.appendChild(path)\n\n trail.appendChild(svg)\n\n trail.luge = {\n cursor: {\n position: {\n x: 0,\n y: 0\n },\n smoothPosition: {\n x: 0,\n y: 0\n },\n points: [],\n path: path\n }\n }\n\n if (trail.hasAttribute('data-lg-cursor-inertia')) {\n trail.luge.cursor.inertia = Number(trail.getAttribute('data-lg-cursor-inertia'))\n } else {\n trail.luge.cursor.inertia = attributes.inertia\n }\n\n if (trail.hasAttribute('data-lg-cursor-length')) {\n trail.luge.cursor.length = Number(trail.getAttribute('data-lg-cursor-length'))\n } else {\n trail.luge.cursor.length = attributes.length\n }\n\n trail.classList.add('lg-cursor-trail')\n\n self.trails.push(trail)\n })\n\n cursor.classList.add('lg-cursor')\n\n this.cursors.push(cursor)\n })\n }\n\n done()\n }\n\n /**\n * Hover handler\n */\n hoverHandler (e) {\n const element = e.target\n const tag = element.tagName.toLowerCase()\n const style = element.getAttribute('data-lg-hover')\n let hover = null\n\n if (this.hoverTags.includes(tag) || style !== null) {\n hover = (e.type === 'mouseenter')\n }\n\n if (hover !== null) {\n this.cursors.forEach(cursor => {\n cursor.classList.toggle('lg-cursor--hover', hover)\n\n if (style !== null && style !== '') {\n cursor.classList.toggle('lg-cursor--hover--' + style, hover)\n }\n })\n }\n }\n\n /**\n * Raf animation\n */\n tick (timestamp) {\n // Pointers\n this.pointers.forEach(pointer => {\n // Get position\n const position = pointer.luge.cursor.position\n const smoothPosition = pointer.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n smoothPosition.x += (position.x - smoothPosition.x) * pointer.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * pointer.luge.cursor.inertia\n\n pointer.style.transform = 'translate3d(' + smoothPosition.x + 'px, ' + smoothPosition.y + 'px, 0)'\n })\n\n // Trails\n this.trails.forEach(trail => {\n // Get position\n const position = trail.luge.cursor.position\n const smoothPosition = trail.luge.cursor.smoothPosition\n\n position.x = window.mouseX\n position.y = window.mouseY\n\n if (window.mouseX !== -1) {\n smoothPosition.x += (position.x - smoothPosition.x) * trail.luge.cursor.inertia\n smoothPosition.y += (position.y - smoothPosition.y) * trail.luge.cursor.inertia\n\n // Update points\n const points = trail.luge.cursor.points\n\n const point = {\n x: smoothPosition.x,\n y: smoothPosition.y\n }\n points.push(point)\n\n if (points.length > trail.luge.cursor.length) {\n points.shift()\n }\n\n // Draw smooth line # https://francoisromain.medium.com/smooth-a-svg-path-with-cubic-bezier-curves-e37b49d46c74\n let d = ''\n let trailLength = 0\n\n const svgPath = (points, command) => {\n const d = points.reduce((acc, point, i, a) => i === 0\n\n ? `M ${point.x},${point.y}`\n\n : `${acc} ${command(point, i, a)}`\n , '')\n return `${d}`\n }\n\n const line = (pointA, pointB) => {\n const lengthX = pointB.x - pointA.x\n const lengthY = pointB.y - pointA.y\n return {\n length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n angle: Math.atan2(lengthY, lengthX)\n }\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n\n const smoothing = 0.2\n\n const o = line(p, n)\n\n trailLength += o.length\n\n const angle = o.angle + (reverse ? Math.PI : 0)\n const length = o.length * smoothing\n\n const x = current.x + Math.cos(angle) * length\n const y = current.y + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const [cpsX, cpsY] = controlPoint(a[i - 1], a[i - 2], point)\n\n const [cpeX, cpeY] = controlPoint(point, a[i - 1], a[i + 1], true)\n return `C ${cpsX},${cpsY} ${cpeX},${cpeY} ${point.x},${point.y}`\n }\n\n d = svgPath(points, bezierCommand)\n\n trail.luge.cursor.path.setAttribute('d', d)\n\n trail.style.setProperty('--length', trailLength)\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Intersection extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('intersection')\n\n this.luge = luge\n\n // Listeners\n this.listeners = {\n onViewportIntersect: this.onViewportIntersect.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.elements = []\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n class: String\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-intersection]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.viewportobserver.add(element)\n element.addEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.luge.viewportobserver.remove(element)\n element.removeEventListener('viewportintersect', this.listeners.onViewportIntersect)\n\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * On viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n const position = element.luge.viewport.position\n const CSSClass = element.luge.intersection.class ? element.luge.intersection.class.split(' ') : false\n\n // Set CSS classes\n element.classList.remove('is-in', 'is-out', 'is-out-top', 'is-out-bottom')\n\n if (position === 'in') {\n element.classList.add('is-in')\n\n if (CSSClass) {\n document.documentElement.classList.add(...CSSClass)\n }\n } else {\n if (CSSClass) {\n document.documentElement.classList.remove(...CSSClass)\n }\n\n if (position === 'above') {\n element.classList.add('is-out', 'is-out-top')\n } else {\n element.classList.add('is-out', 'is-out-bottom')\n }\n }\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class LottiePlayer extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('lottie')\n\n this.luge = luge\n\n this.elements = []\n\n this.doneLoad = null\n\n // Listeners\n this.onViewportIntersect = this.onViewportIntersect.bind(this)\n this.onScrollProgress = this.onScrollProgress.bind(this)\n\n luge.lottie = {\n deferInit: this.deferInit.bind(this)\n }\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n if (typeof lottie === 'object') {\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageLoad', this.pageLoad.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n this.luge.lifecycle.add('reveal', this.reveal.bind(this))\n }\n\n this.bindEvents()\n }\n\n /**\n * Defer init\n */\n deferInit () {\n if (typeof lottie === 'object') {\n this.pageInit(() => {})\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('reveal', this.reveal.bind(this))\n\n ScrollObserver.updateHandler()\n }\n }\n\n /**\n * Set plugin attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n autoplay: Boolean,\n scroll: Boolean,\n loop: Boolean,\n loopFrame: [Number, 0],\n reverse: Boolean,\n required: Boolean,\n force: Boolean,\n lazy: Boolean,\n renderer: [String, Luge.settings.lottie.renderer],\n subframe: [Boolean, Luge.settings.lottie.subFrame]\n }\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n this.reveal(() => {})\n }\n\n /**\n * Page load\n * @param {Function} done Done function\n */\n pageLoad (done) {\n let waitLoad = false\n\n if (this.elements.length > 0) {\n this.elements.forEach(element => {\n if (element.luge.lottie.required && !element.player.isLoaded) {\n waitLoad = true\n }\n })\n }\n\n if (waitLoad) {\n this.doneLoad = done\n } else {\n done()\n }\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const self = this\n this.elements = document.querySelectorAll('[data-lg-lottie]')\n this.toAutoplay = []\n this.toLoad = 0\n this.requireds = 0\n\n this.elements.forEach(element => {\n if (!element.player) {\n const attributes = this.getAttributes(element)\n\n this.luge.scrollobserver.add(element)\n\n if (attributes.lazy) {\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n } else {\n self.initPlayer(element)\n\n element.addEventListener('revealin', self.play)\n element.addEventListener('viewportintersect', self.onViewportIntersect)\n }\n }\n })\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n let elements = []\n\n const oldPage = document.querySelector('[data-lg-page] + [data-lg-page]')\n\n if (oldPage) {\n elements = oldPage.querySelectorAll('[data-lg-lottie]')\n } else {\n elements = this.elements\n }\n\n elements.forEach(element => {\n element.removeEventListener('revealin', self.play)\n element.removeEventListener('viewportintersect', self.onViewportIntersect)\n\n if (element.hasAttribute('data-lg-lottie-scroll')) {\n element.removeEventListener('scrollprogress', self.onScrollProgress)\n }\n\n if (element.player) {\n element.player.destroy()\n delete element.player\n }\n })\n\n done()\n }\n\n /**\n * Reveal\n * @param {Function} done Done function\n */\n reveal (done) {\n this.toAutoplay.forEach(element => {\n if (element.viewportPosition === 'in') {\n element.play()\n }\n })\n\n done()\n }\n\n /**\n * Viewport intersect event handler\n * @param {Event} e Custom event\n */\n onViewportIntersect (e) {\n const element = e.target\n\n if (!element.player) {\n if (element.viewportPosition === 'in') {\n this.initLazy(element)\n }\n } else {\n if (!element.luge.lottie.force) {\n if (element.viewportPosition === 'in') {\n if (element.player.isPaused && (element.player.scrollPaused || element.hasAttribute('data-lg-lottie-autoplay'))) {\n element.player.scrollPaused = false\n element.play()\n }\n } else {\n if (!element.player.isPaused) {\n element.player.scrollPaused = true\n element.pause()\n }\n }\n }\n }\n }\n\n /**\n * Lazy init\n * @param {HTMLElement} element Container\n */\n initLazy (element) {\n this.initPlayer(element)\n\n element.player.addEventListener('DOMLoaded', () => {\n element.play()\n }, { once: true })\n }\n\n /**\n * Init player\n * @param {HTMLElement} element Container\n */\n initPlayer (element) {\n const self = this\n\n this.toLoad++\n\n // Get options\n const attributes = this.getAttributes(element)\n\n element.player = lottie.loadAnimation({\n container: element,\n renderer: attributes.renderer,\n loop: (attributes.loop && !attributes.reverse),\n autoplay: false,\n path: attributes.root\n })\n\n if (typeof attributes.subframe !== 'undefined') {\n element.player.setSubframe(attributes.subframe)\n }\n\n element.classList.add('lg-lottie')\n this.setPlayerStateClasses(element, false)\n\n if (attributes.autoplay) {\n this.toAutoplay.push(element)\n }\n\n if (attributes.required) {\n this.requireds++\n }\n\n if (attributes.scroll) {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n } else if (attributes.loop) {\n element.player.addEventListener('enterFrame', function () {\n if (element.player.totalFrames > 0) {\n const currentFrame = Math.round(element.player.currentFrame)\n\n if (element.player.playDirection === 1) {\n if (currentFrame === element.player.totalFrames - 1) {\n element.player.pause()\n\n if (attributes.reverse) {\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(-1)\n element.player.goToAndPlay(element.player.totalFrames, true)\n\n self.setPlayerStateClasses(element, 'backward')\n }, this)\n } else {\n this.luge.ticker.nextTick(() => {\n element.player.goToAndPlay(attributes.loopFrame, true)\n }, this)\n }\n }\n } else {\n if (currentFrame === attributes.loopFrame) {\n element.player.pause()\n\n this.luge.ticker.nextTick(() => {\n element.player.setDirection(1)\n element.player.goToAndPlay(attributes.loopFrame, true)\n\n self.setPlayerStateClasses(element, 'forward')\n }, this)\n }\n }\n }\n })\n }\n\n // Set methods\n element.play = this.play.bind(this, element)\n element.pause = this.pause.bind(this, element)\n element.stop = this.stop.bind(this, element)\n\n // Loaded\n element.player.addEventListener('DOMLoaded', () => {\n element.classList.add('is-loaded')\n\n self.playerLoaded(attributes.required)\n }, { once: true })\n }\n\n /**\n * Set player state classes\n * @param {HTMLElement} el Element\n * @param {Boolean|String} playing If playing, playing direction\n */\n setPlayerStateClasses (el, playing) {\n el.classList.remove('is-playing', 'is-playing-forward', 'is-playing-backward', 'is-paused')\n\n if (!playing) {\n el.classList.add('is-paused')\n } else {\n el.classList.add('is-playing')\n\n if (playing === 'backward') {\n el.classList.add('is-playing-backward')\n } else {\n el.classList.add('is-playing-forward')\n }\n }\n }\n\n /**\n * Player loaded\n */\n playerLoaded (required = false) {\n this.toLoad--\n\n if (required) {\n this.requireds--\n }\n\n // Call doneLoad when required animations have been loaded\n if (this.requireds === 0 && typeof this.doneLoad === 'function') {\n this.doneLoad()\n this.doneLoad = null\n }\n\n // Emit resize event when all animations are loaded\n if (this.toLoad === 0) {\n this.luge.ticker.nextTick(() => {\n this.luge.emitter.emit('resize')\n })\n }\n }\n\n /**\n * Play\n */\n play (element) {\n if (element && element.player) {\n element.player.play()\n\n this.setPlayerStateClasses(element, 'forward')\n }\n }\n\n /**\n * Pause\n */\n pause (element) {\n if (element && element.player) {\n element.player.pause()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Stop\n */\n stop (element) {\n if (element && element.player) {\n element.player.stop()\n\n this.setPlayerStateClasses(element, false)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n const element = e.target\n\n element.player.goToAndStop(element.player.totalFrames * element.scrollProgress, true)\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class MouseAnimation extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('mouse')\n\n this.luge = luge\n\n this.elements = []\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n window.mouseSpeed = 0\n\n // Listeners\n // ...\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this))\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.getMouseMovement()\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n inertia: [String, this.luge._settings.mouse.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.inertia) {\n const randInertia = data.inertia.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randInertia) {\n data.inertia = Number(randInertia[1]) + ((Number(randInertia[2]) - Number(randInertia[1])) * Math.random())\n } else {\n data.inertia = Number(data.inertia)\n }\n\n data.inertia = Math.max(Math.min(data.inertia, 0.99), 0)\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n const elements = document.querySelectorAll('[data-lg-mouse]')\n const self = this\n\n elements.forEach(element => {\n self.addElement(element)\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.getAttributes(element)\n\n this.luge.mouseobserver.add(element)\n\n element.luge.mouse.smoothX = 0\n element.luge.mouse.smoothY = 0\n element.luge.mouse.smoothProgressX = 0\n element.luge.mouse.smoothProgressY = 0\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Get mouse movement\n */\n getMouseMovement () {\n const distX = this.mouse.x - window.mouseX\n const distY = this.mouse.y - window.mouseY\n const dist = Math.hypot(distX, distY)\n\n window.mouseSpeed += (dist - window.mouseSpeed) * 0.5\n if (window.mouseSpeed < 0.001) {\n window.mouseSpeed = 0\n }\n\n if (dist > 1) {\n const angle = Math.atan2(distY, distX) * (180 / Math.PI) + 180\n\n window.mouseAngle = angle\n\n if (angle >= 45 && angle < 135) {\n window.mouseDirection = 'down'\n } else if (angle >= 135 && angle < 225) {\n window.mouseDirection = 'left'\n } else if (angle >= 225 && angle < 315) {\n window.mouseDirection = 'up'\n } else {\n window.mouseDirection = 'right'\n }\n }\n\n this.mouse = {\n x: window.mouseX,\n y: window.mouseY\n }\n\n setTimeout(this.getMouseMovement.bind(this), 20)\n }\n\n /**\n * Raf animation\n */\n tick () {\n this.elements.forEach(element => {\n const mouse = element.luge.mouse\n\n if (mouse.x) {\n if (mouse.inertia) {\n mouse.smoothX += (mouse.x - mouse.smoothX) * mouse.inertia\n mouse.smoothY += (mouse.y - mouse.smoothY) * mouse.inertia\n mouse.smoothProgressX += (mouse.progressX - mouse.smoothProgressX) * mouse.inertia\n mouse.smoothProgressY += (mouse.progressY - mouse.smoothProgressY) * mouse.inertia\n\n element.style.setProperty('--mouse-x', mouse.smoothX)\n element.style.setProperty('--mouse-y', mouse.smoothY)\n element.style.setProperty('--mouse-progress-x', mouse.smoothProgressX)\n element.style.setProperty('--mouse-progress-y', mouse.smoothProgressY)\n\n const diffX = Math.round((mouse.x - mouse.smoothX) * 1000) / 1000\n const diffY = Math.round((mouse.y - mouse.smoothY) * 1000) / 1000\n\n element.style.setProperty('--abs-diff-x', Math.abs(diffX))\n element.style.setProperty('--diff-x', diffX)\n element.style.setProperty('--abs-diff-y', Math.abs(diffY))\n element.style.setProperty('--diff-y', diffY)\n } else {\n element.style.setProperty('--mouse-x', mouse.x)\n element.style.setProperty('--mouse-y', mouse.y)\n element.style.setProperty('--mouse-progress-x', mouse.progressX)\n element.style.setProperty('--mouse-progress-y', mouse.progressY)\n }\n }\n })\n }\n}\n","import Plugin from '../core/Plugin'\n\nexport default class Parallax extends Plugin {\n /**\n * Constructor\n */\n constructor (luge) {\n super('parallax')\n\n this.luge = luge\n\n this.elements = []\n\n // Listeners\n this.onScrollProgress = this.onScrollProgress.bind(this)\n }\n\n /**\n * Init\n */\n init () {\n super.init()\n\n this.luge.lifecycle.add('pageInit', this.pageInit.bind(this), 30)\n this.luge.lifecycle.add('pageKill', this.pageKill.bind(this))\n\n this.luge.ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Set attributes\n */\n setAttributes () {\n this.pluginAttributes = {\n root: String,\n disable: String,\n amplitude: [String, 1],\n anchor: String,\n inertia: [String, this.luge._settings.parallax.inertia]\n }\n }\n\n /**\n * Get attributes\n */\n getAttributes (element) {\n const data = super.getAttributes(element)\n\n if (data.amplitude) {\n const randAmplitude = data.amplitude.match(/\\{\\s*([0-9]*[.]?[0-9]*)\\s*,\\s*([0-9]*[.]?[0-9]*)\\s*\\}/m)\n\n if (randAmplitude) {\n data.amplitude = Number(randAmplitude[1]) + ((Number(randAmplitude[2]) - Number(randAmplitude[1])) * Math.random())\n } else {\n data.amplitude = Number(data.amplitude)\n }\n }\n\n return data\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n this.luge.emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n this.addElements()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n pageInit (done) {\n this.addElements()\n\n done()\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n const self = this\n\n this.elements.forEach(element => {\n self.removeElement(element)\n })\n\n done()\n }\n\n /**\n * Add elements\n */\n addElements () {\n document.querySelectorAll('[data-lg-parallax]').forEach(element => {\n const attributes = this.getAttributes(element)\n\n const disable = attributes.disable\n let enable = true\n\n const is = (this.luge.browser || {}).is\n\n if (disable && is) {\n if ((disable === 'desktop' && is('desktop')) ||\n (disable === 'handheld' && !is('desktop')) ||\n (disable === 'mobile' && is('mobile')) ||\n (disable === 'tablet' && is('tablet'))) {\n enable = false\n }\n }\n\n if (enable) {\n this.addElement(element)\n }\n })\n }\n\n /**\n * Add element to observer\n * @param {HTMLElement} element Element to add\n */\n addElement (element) {\n if (!this.elements.includes(element)) {\n this.luge.scrollobserver.add(element)\n\n if (element.luge.parallax.root === 'child') {\n element.style.overflow = 'hidden'\n element.luge.parallax.child = element.firstElementChild\n }\n\n element.luge.parallax.movement = 0\n element.luge.parallax.smoothMovement = 0\n\n this.elements.push(element)\n\n this.luge.ticker.nextTick(() => {\n element.addEventListener('scrollprogress', this.onScrollProgress)\n this.moveElement(element)\n })\n }\n }\n\n /**\n * Remove element from observer\n * @param {HTMLElement} element Element to remove\n */\n removeElement (element) {\n element.removeEventListener('scrollprogress', this.onScrollProgress)\n\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n }\n\n /**\n * Scroll progress event handler\n * @param {Event} e Custom event\n */\n onScrollProgress (e) {\n this.moveElement(e.target)\n }\n\n /**\n * Move element\n * @param {HTMLElement} element Element to move\n */\n moveElement (element) {\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = element.scrollProgress\n } else {\n progress = 1 - element.scrollProgress * 2\n }\n\n if (element.luge.parallax.anchor === 'bottom') {\n progress += 1\n } else if (element.luge.parallax.anchor === 'top') {\n progress -= 1\n }\n\n if (element.luge.parallax.root === 'child') {\n element.luge.parallax.movement = (element.luge.parallax.amplitude * 5) * progress\n } else {\n element.luge.parallax.movement = element.clientHeight * progress * element.luge.parallax.amplitude / 2\n }\n }\n\n /**\n * Tick\n */\n tick () {\n this.elements.forEach(element => {\n element.luge.parallax.smoothMovement += (element.luge.parallax.movement - element.luge.parallax.smoothMovement) * element.luge.parallax.inertia\n\n if (element.luge.parallax.root === 'child' && element.luge.parallax.child) {\n element.luge.parallax.child.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + '%, 0) scale(1.' + (String(Math.abs(element.luge.parallax.amplitude)).replace('.', '')) + ')'\n } else {\n element.style.transform = 'translate3d(0, ' + element.luge.parallax.smoothMovement + 'px, 0)'\n }\n })\n }\n}\n","import Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Luge from './Core'\n\nclass ViewportObserver {\n constructor () {\n this.elements = []\n\n LifeCycle.add('siteInit', this.init.bind(this), 20)\n }\n\n /**\n * Init\n */\n init (done) {\n this.createObserver()\n\n done()\n }\n\n /**\n * Create observer\n */\n createObserver () {\n this.observer = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n {\n threshold: [Luge.settings.intersection.threshold]\n }\n )\n }\n\n /**\n * Intersection callback\n * @param {IntersectionObserverEntry[]} entries IntersectionObserverEntry objects\n */\n intersectionCallback (entries) {\n entries.forEach((entry) => {\n const element = entry.target\n let position = 'in'\n\n if (!entry.isIntersecting) {\n if (entry.boundingClientRect.y <= 0) {\n position = 'above'\n } else {\n position = 'under'\n }\n }\n\n if (element.luge.viewport.position !== position) {\n element.luge.viewport.position = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n\n if (position === 'in') {\n element.dispatchEvent(new CustomEvent('viewportin'))\n } else {\n element.dispatchEvent(new CustomEvent('viewportout'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n }\n }\n })\n }\n\n /**\n * Add element to observe\n * @param {HTMLElement} element Element\n */\n add (element) {\n this.observer.observe(element)\n\n const properties = {\n viewport: {\n position: 'out'\n }\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n }\n\n /**\n * Remove observed element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n this.observer.unobserve(element)\n }\n}\n\nexport default new ViewportObserver()\n","import Luge from './Core'\n\nclass Ticker {\n /**\n * Constructor\n */\n constructor () {\n this.callbacks = []\n this.onceCallbacks = []\n\n if (!Luge.settings.ticker.external) {\n this.fps = 60\n this.fpsInterval = 1000 / this.fps\n this.lastTickTime = null\n\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Add a tick function\n * @param {Function} callback Tick function\n * @param {Object} context Context\n */\n add (callback, context) {\n let exists = false\n this.callbacks.forEach(object => {\n if (object.cb === callback && object.context === context) {\n exists = true\n }\n })\n\n if (!exists) {\n this.callbacks.push({\n cb: callback,\n context: context\n })\n }\n }\n\n /**\n * Remove a tick function\n * @param {String} id Tick ID\n * @param {Object} context Context\n */\n remove (callback, context) {\n const self = this\n\n this.callbacks.forEach((object, index) => {\n if (object.cb === callback && object.context === context) {\n delete self.callbacks[index]\n }\n })\n }\n\n /**\n * Execute function at next tick\n * @param {Function} callback Function to execute\n * @param {Object} context Context\n */\n nextTick (callback, context) {\n this.onceCallbacks.push({\n cb: callback,\n context: context\n })\n }\n\n /**\n * Call tick function\n */\n _tick (nowTime) {\n const elapsedTime = nowTime - this.lastTickTime\n\n if (elapsedTime > this.fpsInterval) {\n this.tick(nowTime)\n this.lastTickTime = nowTime - (elapsedTime % this.fpsInterval)\n }\n\n if (!Luge.settings.ticker.external) {\n requestAnimationFrame(this._tick.bind(this))\n }\n }\n\n /**\n * Call tick functions\n */\n tick (nowTime) {\n const self = this\n\n this.callbacks.forEach(object => {\n object.cb.apply(object.context, [nowTime])\n })\n\n this.onceCallbacks.forEach((object, index) => {\n object.cb.apply(object.context, [nowTime])\n\n delete self.onceCallbacks[index]\n })\n }\n}\n\nexport default new Ticker()\n","import Emitter from './Emitter'\nimport Helpers from './Helpers'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass MouseObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n\n this.timeouts = {\n scroll: null\n }\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n Ticker.add(this.tick, this)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('mouseMove', this.mouseHandler, this)\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('update', this.updateHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n }, this)\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n clearTimeout(this.timeouts.scroll)\n this.timeouts.scroll = setTimeout(this.getBoundingThrottle.bind(this), 75)\n }\n\n /**\n * Mouse handler\n */\n mouseHandler () {\n const self = this\n\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n\n window.mouseLastScrollTop = window.scrollTop\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.elementsToBound = this.elements\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bouding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n this.setElementPosition(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n const properties = {\n anchor: {\n x: bounding.left,\n y: bounding.top + window.unifiedScrollTop\n },\n width: element.offsetWidth,\n height: element.offsetHeight\n }\n\n if (element.luge || (element.luge = {})) {\n element.luge = Helpers.mergeDeep(element.luge, properties)\n }\n\n element.setAttribute('style', style)\n }\n\n /**\n * Set element position\n * @param {HTMLElement} element Element\n */\n setElementPosition (element) {\n if (element.luge && element.luge.anchor) {\n const mouse = {\n x: window.mouseX - element.luge.anchor.x,\n y: window.mouseY - element.luge.anchor.y + window.unifiedScrollTop\n }\n\n mouse.progressX = Helpers.clamp(mouse.x / element.luge.width, 0, 1)\n mouse.progressY = Helpers.clamp(mouse.y / element.luge.height, 0, 1)\n\n element.luge.mouse = Helpers.mergeDeep(element.luge.mouse, mouse)\n }\n }\n\n /**\n * Add mouse element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove mouse element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n }\n\n /**\n * Raf animation\n */\n tick () {\n const self = this\n const diffScroll = window.scrollTop - window.mouseLastScrollTop\n\n if (diffScroll !== 0) {\n this.elements.forEach(element => {\n self.setElementPosition(element)\n })\n }\n }\n}\n\nexport default new MouseObserver()\n","import Emitter from './Emitter'\nimport LifeCycle from './LifeCycle'\nimport Ticker from './Ticker'\n\nclass ScrollObserver {\n constructor () {\n this.elements = []\n\n this.elementsToBound = []\n this.elementsToCheck = []\n\n this.setMaxScrollTop()\n\n LifeCycle.add('pageKill', this.pageKill.bind(this))\n LifeCycle.add('pageInit', this.init.bind(this), 20)\n\n this.bindEvents()\n }\n\n /**\n * Bind events\n */\n bindEvents () {\n Emitter.on('resize', this.resizeHandler, this)\n Emitter.on('scroll', this.scrollHandler, this)\n Emitter.on('update', this.updateHandler, this)\n }\n\n /**\n * Kill\n * @param {Function} done Done function\n */\n pageKill (done) {\n this.elements = []\n this.elementsToBound = []\n this.elementsToCheck = []\n\n done()\n }\n\n /**\n * Initialization\n * @param {Function} done Done function\n */\n init (done) {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n\n done()\n }\n\n /**\n * Resize handler\n */\n resizeHandler () {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }\n\n /**\n * Scroll handler\n */\n scrollHandler () {\n this.checkElementsThrottle()\n }\n\n /**\n * Update handler\n */\n updateHandler () {\n Ticker.nextTick(() => {\n this.getBoundingThrottle()\n this.checkElementsThrottle()\n }, this)\n }\n\n /**\n * Set max scroll top\n */\n setMaxScrollTop () {\n window.maxScrollTop = Math.max(\n document.body ? document.body.scrollHeight : 0,\n document.body ? document.body.offsetHeight : 0,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) - window.innerHeight\n }\n\n /**\n * Get elements bouding throttle\n */\n getBoundingThrottle () {\n this.setMaxScrollTop()\n\n this.elements.forEach(element => {\n if (!this.elementsToBound.includes(element)) {\n element.scrollProgress = 0\n\n this.elementsToBound.push(element)\n }\n })\n\n Ticker.nextTick(this.getBounding.bind(this))\n }\n\n /**\n * Get elements bounding\n */\n getBounding () {\n this.elementsToBound.forEach(element => {\n this.setElementBounding(element)\n })\n this.elementsToBound = []\n }\n\n /**\n * Set element bouding\n * @param {HTMLElement} element Element\n */\n setElementBounding (element) {\n const style = element.getAttribute('style')\n element.setAttribute('style', '')\n\n const bounding = element.getBoundingClientRect()\n\n element.scrollStart = bounding.top + window.unifiedScrollTop - window.innerHeight\n\n element.scrollEnd = element.scrollStart + element.clientHeight + window.innerHeight\n element.scrollEnd = Math.min(element.scrollEnd, window.maxScrollTop)\n\n element.scrollMiddle = element.scrollStart + (element.scrollEnd - element.scrollStart) / 2\n\n element.setAttribute('style', style)\n }\n\n /**\n * Check elements throttle\n */\n checkElementsThrottle () {\n this.elements.forEach(element => {\n if (!this.elementsToCheck.includes(element)) {\n this.elementsToCheck.push(element)\n }\n })\n\n Ticker.nextTick(this.checkElements.bind(this))\n }\n\n /**\n * Check elements position\n */\n checkElements () {\n this.elementsToCheck.forEach(element => {\n this.checkElement(element)\n })\n this.elementsToCheck = []\n }\n\n /**\n * Check individual element position\n * @param {HTMLElement} element Element to check\n */\n checkElement (element) {\n const scrollTop = window.unifiedScrollTop\n\n let position = ''\n let progress = 0\n\n if (element.scrollStart < 0) {\n progress = Math.min(Math.max(scrollTop / element.scrollEnd, 0), 1)\n } else {\n progress = Math.min(Math.max((scrollTop - element.scrollStart) / (element.scrollEnd - element.scrollStart), 0), 1)\n }\n\n if (isNaN(progress)) {\n progress = 0\n }\n\n if (progress <= 0 && element.scrollStart > 0) {\n position = 'under'\n } else if (progress >= 1 && element.scrollEnd < window.maxScrollTop) {\n position = 'above'\n } else {\n position = 'in'\n }\n\n element.scrollProgress = progress\n\n if (element.viewportPosition !== position) {\n element.viewportPosition = position\n\n element.dispatchEvent(new CustomEvent('viewportintersect'))\n element.dispatchEvent(new CustomEvent('viewport' + position))\n\n if (position !== 'in') {\n element.dispatchEvent(new CustomEvent('viewportout'))\n }\n\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n } else if (progress > 0 && progress < 1) {\n element.dispatchEvent(new CustomEvent('scrollprogress'))\n }\n }\n\n /**\n * Add scroll element\n * @param {HTMLElement} element Element\n */\n add (element) {\n if (!this.elements.includes(element)) {\n element.scrollProgress = 0\n\n if (!this.elementsToBound.includes(element)) {\n this.elementsToBound.push(element)\n this.elementsToCheck.push(element)\n }\n\n this.elements.push(element)\n }\n }\n\n /**\n * Remove scroll element\n * @param {HTMLElement} element Element\n */\n remove (element) {\n if (this.elements.includes(element)) {\n this.elements.splice(this.elements.indexOf(element), 1)\n }\n\n if (this.elementsToBound.includes(element)) {\n this.elementsToBound.splice(this.elementsToBound.indexOf(element), 1)\n }\n\n if (this.elementsToCheck.includes(element)) {\n this.elementsToCheck.splice(this.elementsToCheck.indexOf(element), 1)\n }\n }\n}\n\nexport default new ScrollObserver()\n","import {\n Preloader,\n Reveal,\n Transition,\n ScrollAnimation,\n SmoothScroll,\n Cursor,\n Intersection,\n LottiePlayer,\n MouseAnimation,\n Parallax,\n Browser,\n Luge\n} from './luge'\n\nconst luge = new Luge()\n\nluge.addPlugin('preloader', Preloader)\nluge.addPlugin('reveal', Reveal)\nluge.addPlugin('transition', Transition)\nluge.addPlugin('scroll', ScrollAnimation)\nluge.addPlugin('smooth', SmoothScroll)\nluge.addPlugin('cursor', Cursor)\nluge.addPlugin('intersection', Intersection)\nluge.addPlugin('lottie', LottiePlayer)\nluge.addPlugin('mouse', MouseAnimation)\nluge.addPlugin('parallax', Parallax)\nluge.addPlugin('browser', Browser)\n\nluge.settings({\n cursor: {\n disabled: luge.browser.some(['tablet', 'mobile'])\n },\n smooth: {\n disabled: luge.browser.some(['tablet', 'mobile']) || luge.browser.satisfies({ safari: '<=12' })\n }\n})\n\nluge.init()\n\nwindow.luge = luge\n","import LifeCycle from './LifeCycle'\nimport Core from './Core'\nimport Emitter from './Emitter'\nimport ViewportObserver from './ViewportObserver'\nimport MouseObserver from './MouseObserver'\nimport ScrollObserver from './ScrollObserver'\nimport Ticker from './Ticker'\n\nclass Luge {\n plugins = {}\n\n constructor() {\n this.emitter = {\n emit: Emitter.emit.bind(Emitter),\n off: Emitter.off.bind(Emitter),\n on: Emitter.on.bind(Emitter),\n once: Emitter.once.bind(Emitter)\n }\n\n this.viewportobserver = {\n add: ViewportObserver.add.bind(ViewportObserver),\n remove: ViewportObserver.remove.bind(ViewportObserver)\n }\n\n this.lifecycle = {\n add: LifeCycle.add.bind(LifeCycle),\n refresh: LifeCycle.cycle.bind(LifeCycle, 'refresh'),\n remove: LifeCycle.remove.bind(LifeCycle),\n debug: LifeCycle.enableDebug.bind(LifeCycle),\n _cycle: LifeCycle.cycle.bind(LifeCycle)\n }\n\n this.mouseobserver = {\n add: MouseObserver.add.bind(MouseObserver),\n remove: MouseObserver.remove.bind(MouseObserver)\n }\n\n this.scrollobserver = {\n add: ScrollObserver.add.bind(ScrollObserver),\n remove: ScrollObserver.remove.bind(ScrollObserver)\n }\n\n this.ticker = {\n add: Ticker.add.bind(Ticker),\n nextTick: Ticker.nextTick.bind(Ticker),\n remove: Ticker.remove.bind(Ticker),\n tick: Ticker.tick.bind(Ticker)\n }\n\n // TODO!: rename to setSettings\n this.settings = Core.setSettings.bind(Core)\n }\n\n init() {\n // Site init on DOM ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', LifeCycle.cycle.bind(LifeCycle, 'load'), { once: true })\n } else {\n this.ticker.nextTick(() => {\n LifeCycle.cycle('load')\n },\n null)\n }\n }\n\n addPlugin(key, Plugin) {\n this.plugins[key] = new Plugin(this)\n }\n\n get _settings() {\n return Core.settings\n }\n}\n\nexport default Luge\n","import Bowser from 'bowser/src/bowser.js'\n\nexport default class Browser {\n /**\n * Constructor\n */\n constructor (luge) {\n const documentElement = document.documentElement\n\n // Browser detect\n const browser = Bowser.getParser(window.navigator.userAgent)\n\n // Platform type class\n documentElement.classList.add('is-' + browser.getPlatformType())\n\n if (browser.is('mobile') || browser.is('tablet')) {\n documentElement.classList.add('is-handheld')\n }\n\n // Browser class\n if (browser.is('Safari')) {\n documentElement.classList.add('is-safari')\n documentElement.classList.add('is-safari-' + browser.getBrowserVersion())\n }\n\n luge.browser = browser\n }\n}\n"],"names":["Helpers$1","Helpers","isArray","item","Array","isObject","isString","mergeDeep","target","source","output","Object","assign","keys","forEach","key","_Object$assign","_Object$assign2","toCamelCase","string","replace","word","index","toLowerCase","toUpperCase","toUpperCamelCase","charAt","slice","isInPage","node","document","body","contains","deepFreeze","obj","prop","freeze","clamp","x","lower","upper","Math","min","max","Emitter$1","Emitter","this","events","_proto","prototype","on","name","callback","context","once","push","cb","emit","self","data","call","arguments","object","apply","off","LifeCycle$2","LifeCycle","_this","eventsName","eventName","callbacks","done","cycles","load","reload","transition","refresh","debug","cycle","cycleName","current","console","log","proceed","_this2","length","event","next","wait","requestAnimationFrame","bind","add","position","remove","_this3","sort","a","b","enableDebug","value","Core","Luge","settings","cursor","inertia","trailLength","intersection","threshold","lottie","renderer","subFrame","mouse","parallax","preloader","duration","reveal","stagger","scroll","smooth","ticker","external","credits","show","timeouts","resizeThrottle","scrollEnd","windowWidth","windowHeight","clientWidth","window","scrollTop","scrollY","unifiedScrollTop","maxScrollTop","scrollProgress","previousScrollTop","isScrolling","mouseX","mouseY","mouseLastScrollTop","siteInit","bindEvents","setSettings","showCredits","setCSSProperties","scrollHandler","addEventListener","mouseHandler","passive","e","pageY","pageX","clearTimeout","setTimeout","resizeHandler","newWidth","innerWidth","newHeight","innerHeight","clientHeight","documentElement","style","setProperty","scrollStart","classList","consoleBaseStyle","Plugin","slug","pluginSlug","beforeInit","isDisabled","disabled","init","setAttributes","pluginAttributes","getAttributes","element","attributes","attribute","attributeKey","attributeValue","dataset","type","defaultValue","undefined","Boolean","luge","PreLoader","_Plugin","intro","playerIn","startTime","Date","now","doneLoad","_assertThisInitialized","_inheritsLoose","el","querySelector","root","initLottie","lifecycle","siteIn","pageLoad","String","Number","_settings","in","reverse","elapsed","remaining","clear","play","getComputedStyle","getPropertyValue","destroy","parentNode","removeChild","animIn","loadAnimation","container","loop","autoplay","path","rendererSettings","preserveAspectRatio","setDirection","goToAndStop","totalFrames","setAttribute","Reveal","elements","toRevealIn","toRevealOut","reveals","out","canReveal","onScrollProgress","pageInit","pageKill","manual","multiple","delay","emitter","updateHandler","addElements","querySelectorAll","addElement","includes","closest","revealName","revealCallback","setRevealClasses","scrollobserver","from","children","child","childRevealName","lgReveal","nextTick","lgRevealChild","isRevealed","removeElement","removeEventListener","splice","indexOf","round","revealElements","_this4","revealInTimeout","state","states","split","dispatchEvent","CustomEvent","Transition","url","location","href","pathname","pageFetched","currentPage","prevScrollTop","newScrollTop","transitions","listeners","linkHandler","hasAttribute","initLoader","historyStateChanged","pageFetch","pageOut","pageIn","pageCreate","bindLinksEvent","unbindLinksEvent","currentTarget","getAttribute","origin","preventDefault","navigateTo","history","pushState","prefetchLink","createElement","rel","head","appendChild","_cycle","loader","animOut","playerOut","fetch","credentials","then","response","text","html","DOMParser","parseFromString","newPage","insertAdjacentElement","opacity","top","left","width","className","oldTitle","newTitle","innerText","behavior","smoothScrollTop","oldPage","page","pageName","onpageout","stop","svgElement","onpagein","goToAndPlay","URL","ScrollAnimation","allowedProperties","transformProperties","presets","background-x","background-y","tick","yoyo","animate","randInertia","match","random","scrollAnimation","smoothProgress","properties","JSON","parse","declarations","property","values","fromValue","toValue","unit","safeProperty","to","animation","atDest","_step","_iterator","_createForOfIteratorHelperLoose","progress","abs","_i","_Object$entries","entries","_Object$entries$_i","translate3d","transform","_i2","_Object$entries2","_Object$entries2$_i","y","z","join","styles","willChange","_i3","_Object$entries3","_Object$entries3$_i","_i4","_Object$entries4","_Object$entries4$_i","diff","SmoothScroll","hasSmoothScroll","isSmoothScrolling","hasSmooth","_navigator","_navigator2","smoothScroll","targetScroll","targetSmoothScroll","platform","navigator","userAgentData","virtualScroll","VirtualScroll","firefoxMultiplier","mouseMultiplier","useKeyboard","useTouch","onVirtualScroll","onScroll","_ref","deltaY","originalEvent","isPrevented","composedPath","find","ctrlKey","scrollTo","Cursor","cursors","pointers","trails","hoverTags","hide","hoverHandler","capture","pointer","smoothPosition","trail","svg","createElementNS","points","tag","tagName","hover","toggle","timestamp","shift","d","controlPoint","previous","pointA","pointB","lengthX","lengthY","o","sqrt","pow","angle","atan2","PI","cos","sin","command","reduce","acc","point","i","_controlPoint","cpsX","cpsY","_controlPoint2","cpeX","cpeY","svgPath","Intersection","onViewportIntersect","class","viewportobserver","_document$documentEle","_document$documentEle2","viewport","CSSClass","LottiePlayer","deferInit","ScrollObserver","loopFrame","required","force","lazy","subframe","waitLoad","player","isLoaded","toAutoplay","toLoad","requireds","initPlayer","viewportPosition","isPaused","scrollPaused","pause","initLazy","setSubframe","setPlayerStateClasses","currentFrame","playDirection","playerLoaded","playing","MouseAnimation","mouseSpeed","getMouseMovement","mouseobserver","smoothX","smoothY","smoothProgressX","smoothProgressY","distX","distY","dist","hypot","mouseAngle","mouseDirection","progressX","progressY","diffX","diffY","Parallax","disable","amplitude","anchor","randAmplitude","enable","is","browser","overflow","firstElementChild","movement","smoothMovement","moveElement","ViewportObserver$1","ViewportObserver","createObserver","observer","IntersectionObserver","intersectionCallback","entry","isIntersecting","boundingClientRect","observe","unobserve","Ticker$1","Ticker","onceCallbacks","fps","fpsInterval","lastTickTime","_tick","exists","nowTime","elapsedTime","MouseObserver$1","MouseObserver","elementsToBound","getBoundingThrottle","setElementPosition","getBounding","setElementBounding","bounding","getBoundingClientRect","offsetWidth","height","offsetHeight","ScrollObserver$2","elementsToCheck","setMaxScrollTop","checkElementsThrottle","scrollHeight","scrollMiddle","checkElements","_this5","checkElement","isNaN","plugins","readyState","addPlugin","get","Preloader","Bowser","getParser","userAgent","getPlatformType","getBrowserVersion","some","satisfies","safari"],"mappings":"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"} \ No newline at end of file diff --git a/src/js/luge/plugins/Parallax.js b/src/js/luge/plugins/Parallax.js index c2040c1..d5b8d91 100644 --- a/src/js/luge/plugins/Parallax.js +++ b/src/js/luge/plugins/Parallax.js @@ -109,7 +109,7 @@ export default class Parallax extends Plugin { const disable = attributes.disable let enable = true - const is = (window.luge.browser || {}).is + const is = (this.luge.browser || {}).is if (disable && is) { if ((disable === 'desktop' && is('desktop')) || From e418efeaeb75f771e08121aa49382c6d340325d5 Mon Sep 17 00:00:00 2001 From: Antoine Wodniack Date: Fri, 26 Jan 2024 16:57:20 +0100 Subject: [PATCH 04/11] [LottiePlayer] Fix settings --- src/js/luge/plugins/LottiePlayer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/luge/plugins/LottiePlayer.js b/src/js/luge/plugins/LottiePlayer.js index b566aef..688f450 100644 --- a/src/js/luge/plugins/LottiePlayer.js +++ b/src/js/luge/plugins/LottiePlayer.js @@ -65,8 +65,8 @@ export default class LottiePlayer extends Plugin { required: Boolean, force: Boolean, lazy: Boolean, - renderer: [String, Luge.settings.lottie.renderer], - subframe: [Boolean, Luge.settings.lottie.subFrame] + renderer: [String, this.luge._settings.lottie.renderer], + subframe: [Boolean, this.luge._settings.lottie.subFrame] } } From b8aa805e07165f1f41f07cd5b90f7b61b0f51d08 Mon Sep 17 00:00:00 2001 From: Antoine Wodniack Date: Fri, 26 Jan 2024 17:15:10 +0100 Subject: [PATCH 05/11] [Parallax] Fix undefined function error --- src/js/luge/plugins/Parallax.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/js/luge/plugins/Parallax.js b/src/js/luge/plugins/Parallax.js index d5b8d91..918267f 100644 --- a/src/js/luge/plugins/Parallax.js +++ b/src/js/luge/plugins/Parallax.js @@ -109,13 +109,13 @@ export default class Parallax extends Plugin { const disable = attributes.disable let enable = true - const is = (this.luge.browser || {}).is + const browser = (this.luge.browser || {}) - if (disable && is) { - if ((disable === 'desktop' && is('desktop')) || - (disable === 'handheld' && !is('desktop')) || - (disable === 'mobile' && is('mobile')) || - (disable === 'tablet' && is('tablet'))) { + if (disable && browser.is) { + if ((disable === 'desktop' && browser.is('desktop')) || + (disable === 'handheld' && !browser.is('desktop')) || + (disable === 'mobile' && browser.is('mobile')) || + (disable === 'tablet' && browser.is('tablet'))) { enable = false } } From 452c2062cce152a57344f8454f7a5f4fbbf7245a Mon Sep 17 00:00:00 2001 From: Antoine Wodniack Date: Fri, 26 Jan 2024 17:15:48 +0100 Subject: [PATCH 06/11] [Global] Update packages --- package.json | 22 +- yarn.lock | 5810 -------------------------------------------------- 2 files changed, 10 insertions(+), 5822 deletions(-) diff --git a/package.json b/package.json index b845193..12eb888 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@waaark/luge", - "version": "0.6.17-beta.2", + "version": "1.0.0-rc.1", "description": "Front-end animation plugin for uncreative developers", "author": "Antoine Wodniack (https://wodniack.dev)", "homepage": "https://luge.cool", @@ -39,21 +39,19 @@ "scss:postcss": "postcss -d dist/css/ dist/css/" }, "devDependencies": { - "@babel/eslint-parser": "^7.21.3", - "autoprefixer": "^10.4.14", - "eslint": "^7.29.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-import": "^2.27.5", + "@babel/eslint-parser": "^7.23.9", + "autoprefixer": "^10.4.17", + "bowser": "^2.11.0", + "eslint": "^8.56.0", + "eslint-config-standard": "^17.1.0", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", "microbundle": "^0.15.1", - "node-sass": "^7.0.1", + "node-sass": "^9.0.0", "npm-run-all": "^4.1.5", - "postcss": "^8.4.21", - "postcss-cli": "^10.1.0" - }, - "dependencies": { - "bowser": "^2.11.0", + "postcss": "^8.4.33", + "postcss-cli": "^11.0.0", "virtual-scroll": "^2.2.1" } } diff --git a/yarn.lock b/yarn.lock index e42308c..e69de29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,5810 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/code-frame@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== - dependencies: - "@babel/highlight" "^7.22.5" - -"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - -"@babel/core@^7.12.10": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f" - integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.9" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.8" - "@babel/types" "^7.22.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.1" - -"@babel/eslint-parser@^7.21.3": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.9.tgz#75f8aa978d1e76c87cc6f26c1ea16ae58804d390" - integrity sha512-xdMkt39/nviO/4vpVdrEYPwXCsYIXSSAr6mC7WQsNIlGnuxKyKE7GZjalcnbSWiC4OXGNNN3UQPeHfjSC6sTDA== - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.1" - -"@babel/generator@^7.22.7", "@babel/generator@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" - integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== - dependencies: - "@babel/types" "^7.22.5" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" - integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892" - integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" - integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.17.0" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" - integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a" - integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.10.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" - integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.9" - -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" - integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== - -"@babel/helper-wrap-function@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9" - integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helpers@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" - integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.6" - "@babel/types" "^7.22.5" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.22.5", "@babel/parser@^7.22.7", "@babel/parser@^7.3.3": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" - integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" - integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" - -"@babel/plugin-proposal-class-properties@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" - integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" - integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.12.1", "@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.22.7": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz#053e76c0a903b72b573cb1ab7d6882174d460a1b" - integrity sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" - integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" - integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" - integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" - integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" - integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" - integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-flow-strip-types@^7.12.10", "@babel/plugin-transform-flow-strip-types@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" - integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.22.5" - -"@babel/plugin-transform-for-of@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" - integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" - integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" - integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" - integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" - integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" - integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" - integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== - dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.5" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" - integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.5", "@babel/plugin-transform-optional-chaining@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564" - integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" - integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-display-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" - -"@babel/plugin-transform-react-jsx@^7.12.11", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" - integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/plugin-transform-react-pure-annotations@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" - integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" - integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.1" - -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" - integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.12.11": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.9.tgz#57f17108eb5dfd4c5c25a44c1977eba1df310ac7" - integrity sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.7" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.5" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.6" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.5" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.5" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.5" - "@babel/plugin-transform-for-of" "^7.22.5" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.5" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.5" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" - "@babel/plugin-transform-numeric-separator" "^7.22.5" - "@babel/plugin-transform-object-rest-spread" "^7.22.5" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.6" - "@babel/plugin-transform-parameters" "^7.22.5" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.5" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.5" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.5" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.4" - babel-plugin-polyfill-corejs3 "^0.8.2" - babel-plugin-polyfill-regenerator "^0.5.1" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-flow@^7.12.1": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.5.tgz#876f24ab6b38bd79703a93f32020ca2162312784" - integrity sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-transform-flow-strip-types" "^7.22.5" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.12.10": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6" - integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-transform-react-display-name" "^7.22.5" - "@babel/plugin-transform-react-jsx" "^7.22.5" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.22.5" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.12.5": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" - integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.8.4": - version "7.17.2" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" - integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": - version "7.22.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" - integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.7" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/types" "^7.22.5" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.16.7", "@babel/types@^7.4.4": - version "7.17.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": - version "5.1.1-v1" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" - integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== - dependencies: - eslint-scope "5.1.1" - -"@nicolo-ribaudo/semver-v6@^6.3.3": - version "6.3.3" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" - integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@rollup/plugin-alias@^3.1.1": - version "3.1.9" - resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz#a5d267548fe48441f34be8323fb64d1d4a1b3fdf" - integrity sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw== - dependencies: - slash "^3.0.0" - -"@rollup/plugin-babel@^5.2.2": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-commonjs@^17.0.0": - version "17.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz#757ec88737dffa8aa913eb392fade2e45aef2a2d" - integrity sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew== - dependencies: - "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-json@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - -"@rollup/plugin-node-resolve@^11.0.1": - version "11.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^4.1.2": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" - integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - -"@surma/rollup-plugin-off-main-thread@^2.2.2": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" - integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== - dependencies: - ejs "^3.1.6" - json5 "^2.2.0" - magic-string "^0.25.0" - string.prototype.matchall "^4.0.6" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/estree@*", "@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/minimist@^1.2.0": - version "1.2.1" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz" - integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== - -"@types/node@*": - version "14.14.41" - resolved "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz" - integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.8.2: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.10.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz" - integrity sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz" - integrity sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" - -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz" - integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= - -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -asyncro@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e" - integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg== - -autoprefixer@^10.1.0, autoprefixer@^10.4.14: - version "10.4.14" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== - dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -babel-plugin-macros@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -babel-plugin-polyfill-corejs2@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b" - integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.1" - "@nicolo-ribaudo/semver-v6" "^6.3.3" - -babel-plugin-polyfill-corejs3@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e" - integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.1" - core-js-compat "^3.31.0" - -babel-plugin-polyfill-regenerator@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3" - integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.1" - -babel-plugin-transform-async-to-promises@^0.8.18: - version "0.8.18" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.18.tgz#f4dc5980b8afa0fc9c784b8d931afde913413e39" - integrity sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw== - -babel-plugin-transform-replace-expressions@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-replace-expressions/-/babel-plugin-transform-replace-expressions-0.2.0.tgz#59cba8df4b4a675e7c78cd21548f8e7685bbc30d" - integrity sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA== - dependencies: - "@babel/parser" "^7.3.3" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brotli-size@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e" - integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA== - dependencies: - duplexer "0.1.1" - -browserslist@^4.0.0, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9: - version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== - dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: - version "1.0.30001517" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz#90fabae294215c3495807eb24fc809e11dc2f0a8" - integrity sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.3.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-with-sourcemaps@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== - dependencies: - source-map "^0.6.1" - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -core-js-compat@^3.31.0: - version "3.31.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0" - integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA== - dependencies: - browserslist "^4.21.9" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-declaration-sorter@^6.3.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" - integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^5.2.14: - version "5.2.14" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" - integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.1" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.4" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.2" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@^5.0.1: - version "5.1.15" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" - integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== - dependencies: - cssnano-preset-default "^5.2.14" - lilconfig "^2.0.3" - yaml "^1.10.2" - -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -dependency-graph@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" - integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -duplexer@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q== - -duplexer@^0.1.1, duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ejs@^3.1.6: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.431: - version "1.4.467" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.467.tgz#b0660bf644baff7eedea33b8c742fb53ec60e3c2" - integrity sha512-2qI70O+rR4poYeF2grcuS/bCps5KJh6y1jtZMDDEteyKJQrzLOEhFyXCLcHW6DTBjKjWkk26JhWoAi+Ux9A0fg== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== - dependencies: - array-buffer-byte-length "^1.0.0" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-standard@^16.0.3: - version "16.0.3" - resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz" - integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== - -eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== - dependencies: - debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" - -eslint-module-utils@^2.7.4: - version "2.8.0" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-import@^2.27.5: - version "2.27.5" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" - has "^1.0.3" - is-core-module "^2.11.0" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-promise@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz" - integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.29.0: - version "7.32.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -figures@^1.0.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -filesize@^6.1.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" - integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -functions-have-names@^1.2.2, functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gauge@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.2.tgz" - integrity sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA== - dependencies: - ansi-regex "^5.0.1" - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - -generic-names@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3" - integrity sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A== - dependencies: - loader-utils "^3.2.0" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stdin@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" - integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: - version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0: - version "13.9.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz" - integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== - dependencies: - type-fest "^0.20.2" - -globals@^13.9.0: - version "13.12.1" - resolved "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz" - integrity sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - -globby@^13.0.0: - version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - -globule@^1.0.0: - version "1.3.2" - resolved "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz" - integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.6: - version "4.2.6" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -gzip-size@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" - integrity sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w== - dependencies: - duplexer "^0.1.1" - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== - dependencies: - lru-cache "^6.0.0" - -http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg== - -icss-utils@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" - integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== - dependencies: - import-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - dependencies: - resolve-from "^5.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.3, internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -js-base64@^2.4.3: - version "2.6.4" - resolved "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.2.0, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@^2.0.3, lilconfig@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-utils@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.11, lodash@^4.17.15, lodash@~4.17.10: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.25.0: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz" - integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== - -maxmin@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" - integrity sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw== - dependencies: - chalk "^1.0.0" - figures "^1.0.1" - gzip-size "^3.0.0" - pretty-bytes "^3.0.0" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -microbundle@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/microbundle/-/microbundle-0.15.1.tgz#3fa67128934b31736823b5c868dae4b92d94e766" - integrity sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q== - dependencies: - "@babel/core" "^7.12.10" - "@babel/plugin-proposal-class-properties" "7.12.1" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-jsx" "^7.12.1" - "@babel/plugin-transform-flow-strip-types" "^7.12.10" - "@babel/plugin-transform-react-jsx" "^7.12.11" - "@babel/plugin-transform-regenerator" "^7.12.1" - "@babel/preset-env" "^7.12.11" - "@babel/preset-flow" "^7.12.1" - "@babel/preset-react" "^7.12.10" - "@rollup/plugin-alias" "^3.1.1" - "@rollup/plugin-babel" "^5.2.2" - "@rollup/plugin-commonjs" "^17.0.0" - "@rollup/plugin-json" "^4.1.0" - "@rollup/plugin-node-resolve" "^11.0.1" - "@surma/rollup-plugin-off-main-thread" "^2.2.2" - asyncro "^3.0.0" - autoprefixer "^10.1.0" - babel-plugin-macros "^3.0.1" - babel-plugin-transform-async-to-promises "^0.8.18" - babel-plugin-transform-replace-expressions "^0.2.0" - brotli-size "^4.0.0" - builtin-modules "^3.1.0" - camelcase "^6.2.0" - escape-string-regexp "^4.0.0" - filesize "^6.1.0" - gzip-size "^6.0.0" - kleur "^4.1.3" - lodash.merge "^4.6.2" - postcss "^8.2.1" - pretty-bytes "^5.4.1" - rollup "^2.35.1" - rollup-plugin-bundle-size "^1.0.3" - rollup-plugin-postcss "^4.0.0" - rollup-plugin-terser "^7.0.2" - rollup-plugin-typescript2 "^0.32.0" - rollup-plugin-visualizer "^5.6.0" - sade "^1.7.4" - terser "^5.7.0" - tiny-glob "^0.2.8" - tslib "^2.0.3" - typescript "^4.1.3" - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.34" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== - dependencies: - mime-db "1.51.0" - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.1.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz" - integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -ms@2.1.2, ms@^2.0.0, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nan@^2.13.2: - version "2.14.2" - resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-gyp@^8.4.1: - version "8.4.1" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-releases@^2.0.12: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -node-sass@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz" - integrity sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ== - dependencies: - async-foreach "^0.1.3" - chalk "^4.1.2" - cross-spawn "^7.0.3" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - lodash "^4.17.15" - meow "^9.0.0" - nan "^2.13.2" - node-gyp "^8.4.1" - npmlog "^5.0.0" - request "^2.88.0" - sass-graph "4.0.0" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz" - integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== - dependencies: - hosted-git-info "^4.0.1" - resolve "^1.20.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -npmlog@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz" - integrity sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.0" - set-blocking "^2.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -picomatch@^2.2.2: - version "2.3.0" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== - dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" - -postcss-cli@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-10.1.0.tgz#f6658c4998a1c35bd66cd71009132b2d12e04f80" - integrity sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA== - dependencies: - chokidar "^3.3.0" - dependency-graph "^0.11.0" - fs-extra "^11.0.0" - get-stdin "^9.0.0" - globby "^13.0.0" - picocolors "^1.0.0" - postcss-load-config "^4.0.0" - postcss-reporter "^7.0.0" - pretty-hrtime "^1.0.3" - read-cache "^1.0.0" - slash "^5.0.0" - yargs "^17.0.0" - -postcss-colormin@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" - integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-load-config@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-load-config@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== - dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" - -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" - -postcss-merge-rules@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" - integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-modules@^4.0.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.3.1.tgz#517c06c09eab07d133ae0effca2c510abba18048" - integrity sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q== - dependencies: - generic-names "^4.0.0" - icss-replace-symbols "^1.1.0" - lodash.camelcase "^4.3.0" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - string-hash "^1.1.1" - -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" - integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-reporter@^7.0.0: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.0.5.tgz#e55bd0fdf8d17e4f25fb55e9143fcd79349a2ceb" - integrity sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA== - dependencies: - picocolors "^1.0.0" - thenby "^1.3.4" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.2.1, postcss@^8.4.21: - version "8.4.26" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.26.tgz#1bc62ab19f8e1e5463d98cf74af39702a00a9e94" - integrity sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -pretty-bytes@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" - integrity sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow== - dependencies: - number-is-nan "^1.0.0" - -pretty-bytes@^5.4.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promise.series@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" - integrity sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ== - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^2.0.1: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== - dependencies: - regenerate "^1.4.2" - -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== - dependencies: - jsesc "~0.5.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -request@^2.88.0: - version "2.88.2" - resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.2" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-bundle-size@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz#d245cd988486b4040279f9fd33f357f61673e90f" - integrity sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ== - dependencies: - chalk "^1.1.3" - maxmin "^2.1.0" - -rollup-plugin-postcss@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz#15e9462f39475059b368ce0e49c800fa4b1f7050" - integrity sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w== - dependencies: - chalk "^4.1.0" - concat-with-sourcemaps "^1.1.0" - cssnano "^5.0.1" - import-cwd "^3.0.0" - p-queue "^6.6.2" - pify "^5.0.0" - postcss-load-config "^3.0.0" - postcss-modules "^4.0.0" - promise.series "^0.2.0" - resolve "^1.19.0" - rollup-pluginutils "^2.8.2" - safe-identifier "^0.4.2" - style-inject "^0.3.0" - -rollup-plugin-terser@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup-plugin-typescript2@^0.32.0: - version "0.32.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.32.1.tgz#470ded8e1965efac02043cc0ef4a7fa36bed83b9" - integrity sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw== - dependencies: - "@rollup/pluginutils" "^4.1.2" - find-cache-dir "^3.3.2" - fs-extra "^10.0.0" - resolve "^1.20.0" - tslib "^2.4.0" - -rollup-plugin-visualizer@^5.6.0: - version "5.9.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz#f1aa2d9b1be8ebd6869223c742324897464d8891" - integrity sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A== - dependencies: - open "^8.4.0" - picomatch "^2.3.1" - source-map "^0.7.4" - yargs "^17.5.1" - -rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^2.35.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -sade@^1.7.4: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-identifier@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb" - integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-graph@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz" - integrity sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ== - dependencies: - glob "^7.0.0" - lodash "^4.17.11" - scss-tokenizer "^0.3.0" - yargs "^17.2.1" - -scss-tokenizer@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz" - integrity sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ== - dependencies: - js-base64 "^2.4.3" - source-map "^0.7.1" - -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.1.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slash@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" - integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz" - integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== - dependencies: - agent-base "^6.0.2" - debug "^4.3.1" - socks "^2.6.1" - -socks@^2.6.1: - version "2.6.2" - resolved "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz" - integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.2.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.1, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - -string-hash@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A== - -"string-width@^1.0.2 || 2 || 3 || 4": - version "1.0.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.6: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - -string.prototype.padend@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" - integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -style-inject@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" - integrity sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== - -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -table@^6.0.9: - version "6.8.0" - resolved "https://registry.npmjs.org/table/-/table-6.8.0.tgz" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tar@^6.0.2, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -terser@^5.0.0: - version "5.6.1" - resolved "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz" - integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" - -terser@^5.7.0: - version "5.19.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.1.tgz#dbd7231f224a9e2401d0f0959542ed74d76d340b" - integrity sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenby@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" - integrity sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ== - -tiny-emitter@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - -tiny-glob@^0.2.8: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" - integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" - -tsconfig-paths@^3.14.1: - version "3.14.2" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^2.0.3, tslib@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typescript@^4.1.3: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -virtual-scroll@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/virtual-scroll/-/virtual-scroll-2.2.1.tgz" - integrity sha512-RvjcLxluh7B/6GPzLgQ9d0NYG4yqEguTc3MU7AvxyPVltuo2Cq5RokTL9RKUaZCMJ64in2hus0d03gTtoHp55g== - dependencies: - tiny-emitter "^2.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yaml@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== - -yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.0.0, yargs@^17.5.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yargs@^17.2.1: - version "17.3.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz" - integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" From 06b697d658cfd0ddcc9ac51c59f594a4bbceb0d3 Mon Sep 17 00:00:00 2001 From: Antoine Wodniack Date: Tue, 6 Feb 2024 21:00:59 +0100 Subject: [PATCH 07/11] [LottiePlayer] Fix this reference --- src/js/luge/plugins/LottiePlayer.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/js/luge/plugins/LottiePlayer.js b/src/js/luge/plugins/LottiePlayer.js index 688f450..9c25f55 100644 --- a/src/js/luge/plugins/LottiePlayer.js +++ b/src/js/luge/plugins/LottiePlayer.js @@ -238,6 +238,7 @@ export default class LottiePlayer extends Plugin { */ initPlayer (element) { const self = this + console.log(this) this.toLoad++ @@ -279,28 +280,28 @@ export default class LottiePlayer extends Plugin { element.player.pause() if (attributes.reverse) { - this.luge.ticker.nextTick(() => { + self.luge.ticker.nextTick(() => { element.player.setDirection(-1) element.player.goToAndPlay(element.player.totalFrames, true) self.setPlayerStateClasses(element, 'backward') - }, this) + }, self) } else { - this.luge.ticker.nextTick(() => { + self.luge.ticker.nextTick(() => { element.player.goToAndPlay(attributes.loopFrame, true) - }, this) + }, self) } } } else { if (currentFrame === attributes.loopFrame) { element.player.pause() - this.luge.ticker.nextTick(() => { + self.luge.ticker.nextTick(() => { element.player.setDirection(1) element.player.goToAndPlay(attributes.loopFrame, true) self.setPlayerStateClasses(element, 'forward') - }, this) + }, self) } } } From e6ca28acf1d64df70cc8e7da01cd8c88c343f244 Mon Sep 17 00:00:00 2001 From: Antoine Wodniack Date: Tue, 6 Feb 2024 21:49:38 +0100 Subject: [PATCH 08/11] [Helper] Remove legacy code --- src/js/luge/core/Helpers.js | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/src/js/luge/core/Helpers.js b/src/js/luge/core/Helpers.js index c836d7f..b0eebb6 100644 --- a/src/js/luge/core/Helpers.js +++ b/src/js/luge/core/Helpers.js @@ -1,13 +1,4 @@ class Helpers { - /** - * Check if the variable is an array - * @param {*} item - * @returns {Boolean} - */ - static isArray(item) { - return (item && typeof item === 'object' && Array.isArray(item)) - } - /** * Check if the variable is an object * @param {*} item @@ -68,29 +59,6 @@ class Helpers { } } - /** - * Convert a string to UpperCamelCase - * @param {String} string The string to convert - */ - static toUpperCamelCase (string) { - if (Helpers.isString(string)) { - string = Helpers.toCamelCase(string) - - return string.charAt(0).toUpperCase() + string.slice(1) - } else { - return string - } - } - - /** - * Check if an element is still in the page's body - * @param {HTMLElement} node - * @returns {Boolean} - */ - static isInPage (node) { - return (node === document.body) ? false : document.body.contains(node) - } - /** * Deep freeze an object * @param {Object} obj From 6d28bb71cf0e561bdcee19592d6a5cb804ad9504 Mon Sep 17 00:00:00 2001 From: Antoine Wodniack Date: Tue, 6 Feb 2024 21:52:19 +0100 Subject: [PATCH 09/11] [SmoothScroll] Switch to Lenis --- package.json | 4 +- src/js/luge/plugins/SmoothScroll.js | 87 ++--------------------------- 2 files changed, 8 insertions(+), 83 deletions(-) diff --git a/package.json b/package.json index 12eb888..916537a 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.23.9", + "@studio-freight/lenis": "^1.0.34", "autoprefixer": "^10.4.17", "bowser": "^2.11.0", "eslint": "^8.56.0", @@ -51,7 +52,6 @@ "node-sass": "^9.0.0", "npm-run-all": "^4.1.5", "postcss": "^8.4.33", - "postcss-cli": "^11.0.0", - "virtual-scroll": "^2.2.1" + "postcss-cli": "^11.0.0" } } diff --git a/src/js/luge/plugins/SmoothScroll.js b/src/js/luge/plugins/SmoothScroll.js index 55ac712..dd1c2bd 100644 --- a/src/js/luge/plugins/SmoothScroll.js +++ b/src/js/luge/plugins/SmoothScroll.js @@ -1,17 +1,18 @@ import Helpers from '../core/Helpers' import Plugin from '../core/Plugin' -import VirtualScroll from 'virtual-scroll' +import Lenis from '@studio-freight/lenis' export default class SmoothScroll extends Plugin { /** * Constructor */ - constructor() { + constructor(luge) { super('smooth') + this.luge = luge + window.hasSmoothScroll = false - window.isSmoothScrolling = false } /** @@ -27,87 +28,11 @@ export default class SmoothScroll extends Plugin { if (this.hasSmooth) { window.hasSmoothScroll = true - this.smoothScroll = window.scrollTop - this.targetScroll = window.scrollTop - this.targetSmoothScroll = window.scrollTop + this.lenis = new Lenis() document.documentElement.classList.add('has-smooth-scroll') - const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown' - - this.virtualScroll = new VirtualScroll({ - el: this.element, - firefoxMultiplier: 50, - mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4, - useKeyboard: false, - useTouch: false, - passive: true - }) - - this.virtualScroll.on(this.onVirtualScroll.bind(this)) - - this.luge.ticker.add(this.tick, this) - - this.bindEvents() - } - } - - /** - * Bind events - */ - bindEvents () { - this.luge.emitter.on('scroll', this.onScroll, this) - } - - /** - * Scroll handler - */ - onScroll () { - if (!window.isSmoothScrolling) { - this.targetScroll = window.scrollTop - this.targetSmoothScroll = window.scrollTop - this.smoothScroll = window.scrollTop - } - } - - /** - * Virtual scroll handler - */ - onVirtualScroll({ deltaY, originalEvent: e }) { - const objects = e.composedPath() - const isPrevented = !!objects.find((el) => el?.hasAttribute?.('data-lg-smooth-prevent')) - - if (e.ctrlKey || isPrevented) { - return - } - - this.targetScroll -= deltaY - this.targetScroll = Helpers.clamp(0, this.targetScroll, window.maxScrollTop) - - window.isSmoothScrolling = true - } - - /** - * Tick - */ - tick () { - const settings = this.luge._settings.smooth - - this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * settings.inertia - this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * settings.inertia - - const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll) - - if (window.isSmoothScrolling && diff > 0.5) { - window.scrollTo( - { - top: this.smoothScroll, - behavior: 'auto' - } - ) - } else if (window.isSmoothScrolling) { - this.smoothScroll = this.targetSmoothScroll - window.isSmoothScrolling = false + this.luge.ticker.add(this.lenis.raf, this.lenis) } } } From 58050ad0cf3e84a708e6be7972cda606ce5f5375 Mon Sep 17 00:00:00 2001 From: Antoine Wodniack Date: Tue, 6 Feb 2024 22:02:34 +0100 Subject: [PATCH 10/11] Readme update. --- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2da2020..867e0dc 100644 --- a/README.md +++ b/README.md @@ -10,17 +10,62 @@ Front-end animation plugin for uncreative developers. luge is made to be fast and easy to use. Most of the things happen under the hood so you just have to include the files to start using it: - + -luge is also available as a npm package: +Note that the CSS file is only needed if you plan to use the built-in animations (reveals or transitions). + +If you want to use tree shaking to import only the functionalities you need and lighten the output build, luge is also available as a npm package: ```npm install @waaark/luge``` -Then: +Then import what you need: -```import luge from '@waaark/luge'``` +``` +// Import core and plugins +import { + Preloader, + Reveal, + Transition, + ScrollAnimation, + SmoothScroll, + Cursor, + Intersection, + LottiePlayer, + MouseAnimation, + Parallax, + Browser, + Luge +} from './luge' -Note that the CSS file is only needed if you plan to use the built-in animations (reveals or transitions). +// Create luge instance +const luge = new Luge() + +// Add only the plugin you need +luge.addPlugin('preloader', Preloader) +luge.addPlugin('reveal', Reveal) +luge.addPlugin('transition', Transition) +luge.addPlugin('scroll', ScrollAnimation) +luge.addPlugin('smooth', SmoothScroll) +luge.addPlugin('cursor', Cursor) +luge.addPlugin('intersection', Intersection) +luge.addPlugin('lottie', LottiePlayer) +luge.addPlugin('mouse', MouseAnimation) +luge.addPlugin('parallax', Parallax) +luge.addPlugin('browser', Browser) + +// Configure the settings +luge.settings({ + cursor: { + disabled: luge.browser.some(['tablet', 'mobile']) + }, + smooth: { + disabled: luge.browser.some(['tablet', 'mobile']) || luge.browser.satisfies({ safari: '<=12' }) + } +}) + +// And init +luge.init() +``` That's it. From ecf4cbe813b7afcc929ae0d3fca1d296a07215bd Mon Sep 17 00:00:00 2001 From: Antoine Wodniack Date: Tue, 6 Feb 2024 22:37:08 +0100 Subject: [PATCH 11/11] [SmoothScroll] Update scroll properties from lenis --- src/js/luge/core/Core.js | 19 ++++++++++++++----- src/js/luge/plugins/SmoothScroll.js | 6 +++++- src/scss/luge.scss | 1 + src/scss/luge/_lenis.scss | 19 +++++++++++++++++++ 4 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 src/scss/luge/_lenis.scss diff --git a/src/js/luge/core/Core.js b/src/js/luge/core/Core.js index 236cb36..0b6eef5 100644 --- a/src/js/luge/core/Core.js +++ b/src/js/luge/core/Core.js @@ -171,11 +171,6 @@ class Luge { * Scroll handler */ scrollHandler () { - window.scrollTop = window.scrollY - - // Backward compatibility - window.unifiedScrollTop = window.scrollTop - if (!this.isScrolling) { this.scrollStart() } @@ -183,6 +178,20 @@ class Luge { clearTimeout(this.timeouts.scrollEnd) this.timeouts.scrollEnd = setTimeout(this.scrollEnd.bind(this), 200) + if (!window.hasSmoothScroll) { + this.updateScroll() + } + } + + /** + * Update scroll + */ + updateScroll () { + window.scrollTop = window.scrollY + + // Backward compatibility + window.unifiedScrollTop = window.scrollTop + this.previousScrollTop = window.scrollTop window.scrollProgress = window.scrollTop / window.maxScrollTop diff --git a/src/js/luge/plugins/SmoothScroll.js b/src/js/luge/plugins/SmoothScroll.js index dd1c2bd..11c2d42 100644 --- a/src/js/luge/plugins/SmoothScroll.js +++ b/src/js/luge/plugins/SmoothScroll.js @@ -1,4 +1,4 @@ -import Helpers from '../core/Helpers' +import Core from '../core/Core' import Plugin from '../core/Plugin' import Lenis from '@studio-freight/lenis' @@ -30,6 +30,10 @@ export default class SmoothScroll extends Plugin { this.lenis = new Lenis() + this.lenis.on('scroll', () => { + Core.updateScroll() + }) + document.documentElement.classList.add('has-smooth-scroll') this.luge.ticker.add(this.lenis.raf, this.lenis) diff --git a/src/scss/luge.scss b/src/scss/luge.scss index cd2e248..2e181f4 100644 --- a/src/scss/luge.scss +++ b/src/scss/luge.scss @@ -1,6 +1,7 @@ @import 'luge/easing'; @import 'luge/cursor'; +@import 'luge/lenis'; @import 'luge/loader'; @import 'luge/preloader'; @import 'luge/reveal'; diff --git a/src/scss/luge/_lenis.scss b/src/scss/luge/_lenis.scss new file mode 100644 index 0000000..e74e3e2 --- /dev/null +++ b/src/scss/luge/_lenis.scss @@ -0,0 +1,19 @@ +html.lenis { + height: auto; +} + +.lenis.lenis-smooth { + scroll-behavior: auto !important; +} + +.lenis.lenis-smooth [data-lenis-prevent] { + overscroll-behavior: contain; +} + +.lenis.lenis-stopped { + overflow: hidden; +} + +.lenis.lenis-scrolling iframe { + pointer-events: none; +} \ No newline at end of file