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/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.
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..8cb9e0e
--- /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=(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 = (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
new file mode 100644
index 0000000..cbe4933
--- /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=(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
new file mode 100644
index 0000000..364bd9e
--- /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 = (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
new file mode 100644
index 0000000..93f0aa7
--- /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=(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 = (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/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..3f1cb1b
--- /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=(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 = (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/package.json b/package.json
index df31604..916537a 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",
@@ -16,40 +16,42 @@
"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",
- "eslint": "^7.29.0",
- "eslint-config-standard": "^16.0.3",
- "eslint-plugin-import": "^2.27.5",
+ "@babel/eslint-parser": "^7.23.9",
+ "@studio-freight/lenis": "^1.0.34",
+ "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",
- "gulp": "^4.0.2",
- "gulp-autoprefixer": "^8.0.0",
- "gulp-sass": "^5.0.0",
- "gulp-sass-glob": "^1.1.0",
- "node-sass": "^7.0.1",
- "rollup": "^2.52.3",
- "rollup-plugin-terser": "^7.0.2"
- },
- "dependencies": {
- "bowser": "^2.11.0",
- "virtual-scroll": "^2.2.1",
- "whatwg-fetch": "^3.6.2"
+ "microbundle": "^0.15.1",
+ "node-sass": "^9.0.0",
+ "npm-run-all": "^4.1.5",
+ "postcss": "^8.4.33",
+ "postcss-cli": "^11.0.0"
}
}
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..0b6eef5 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))
}
/**
@@ -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/core/Helpers.js b/src/js/luge/core/Helpers.js
index 3272279..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
@@ -69,26 +60,26 @@ class Helpers {
}
/**
- * Convert a string to UpperCamelCase
- * @param {String} string The string to convert
+ * Deep freeze an object
+ * @param {Object} obj
+ * @returns {Object} freezed object
*/
- static toUpperCamelCase (string) {
- if (Helpers.isString(string)) {
- string = Helpers.toCamelCase(string)
-
- return string.charAt(0).toUpperCase() + string.slice(1)
- } else {
- return string
- }
+ static deepFreeze(obj) {
+ Object.keys(obj).forEach(prop => {
+ if (typeof obj[prop] === 'object') Helpers.deepFreeze(obj[prop])
+ })
+ return Object.freeze(obj)
}
/**
- * Check if an element is still in the page's body
- * @param {HTMLElement} node
- * @returns {Boolean}
+ * Clamp x between lower and upper
+ * @param {Number} x
+ * @param {Number} lower
+ * @param {Number} upper
+ * @returns {Number} clamped Number
*/
- static isInPage (node) {
- return (node === document.body) ? false : document.body.contains(node)
+ static clamp(x, lower, upper) {
+ return Math.min(upper, Math.max(lower, x));
}
}
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..b8c285f
--- /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.bind(LifeCycle, '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..9c25f55 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()
@@ -64,8 +65,8 @@ 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]
}
}
@@ -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)
@@ -237,6 +238,7 @@ class LottiePlayer extends Plugin {
*/
initPlayer (element) {
const self = this
+ console.log(this)
this.toLoad++
@@ -278,28 +280,28 @@ class LottiePlayer extends Plugin {
element.player.pause()
if (attributes.reverse) {
- Ticker.nextTick(() => {
+ self.luge.ticker.nextTick(() => {
element.player.setDirection(-1)
element.player.goToAndPlay(element.player.totalFrames, true)
self.setPlayerStateClasses(element, 'backward')
- }, this)
+ }, self)
} else {
- Ticker.nextTick(() => {
+ self.luge.ticker.nextTick(() => {
element.player.goToAndPlay(attributes.loopFrame, true)
- }, this)
+ }, self)
}
}
} else {
if (currentFrame === attributes.loopFrame) {
element.player.pause()
- Ticker.nextTick(() => {
+ self.luge.ticker.nextTick(() => {
element.player.setDirection(1)
element.player.goToAndPlay(attributes.loopFrame, true)
self.setPlayerStateClasses(element, 'forward')
- }, this)
+ }, self)
}
}
}
@@ -358,8 +360,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 +409,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..918267f 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)
}
/**
@@ -112,13 +109,13 @@ class Parallax extends Plugin {
const disable = attributes.disable
let enable = true
- const is = (window.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
}
}
@@ -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..11c2d42 100644
--- a/src/js/luge/plugins/SmoothScroll.js
+++ b/src/js/luge/plugins/SmoothScroll.js
@@ -1,20 +1,18 @@
-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 Core from '../core/Core'
+import Plugin from '../core/Plugin'
-import VirtualScroll from 'virtual-scroll'
+import Lenis from '@studio-freight/lenis'
-class SmoothScroll extends Plugin {
+export default class SmoothScroll extends Plugin {
/**
* Constructor
*/
- constructor() {
+ constructor(luge) {
super('smooth')
+ this.luge = luge
+
window.hasSmoothScroll = false
- window.isSmoothScrolling = false
}
/**
@@ -30,87 +28,15 @@ class SmoothScroll extends Plugin {
if (this.hasSmooth) {
window.hasSmoothScroll = true
- this.smoothScroll = window.scrollTop
- this.targetScroll = window.scrollTop
- this.targetSmoothScroll = window.scrollTop
-
- document.documentElement.classList.add('has-smooth-scroll')
-
- const platform = navigator?.userAgentData?.platform || navigator?.platform || 'unknown'
+ this.lenis = new Lenis()
- this.virtualScroll = new VirtualScroll({
- el: this.element,
- firefoxMultiplier: 50,
- mouseMultiplier: platform.indexOf('Win') > -1 ? 1 : 0.4,
- useKeyboard: false,
- useTouch: false,
- passive: true
+ this.lenis.on('scroll', () => {
+ Core.updateScroll()
})
- this.virtualScroll.on(this.onVirtualScroll.bind(this))
-
- Ticker.add(this.tick, this)
-
- this.bindEvents()
- }
- }
-
- /**
- * Bind events
- */
- bindEvents () {
- 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 = Math.clamp(0, this.targetScroll, window.maxScrollTop)
-
- window.isSmoothScrolling = true
- }
-
- /**
- * Tick
- */
- tick () {
- this.targetSmoothScroll += (this.targetScroll - this.targetSmoothScroll) * Luge.settings.smooth.inertia
- this.smoothScroll += (this.targetSmoothScroll - this.smoothScroll) * Luge.settings.smooth.inertia
-
- const diff = Math.abs(this.targetSmoothScroll - this.smoothScroll)
+ document.documentElement.classList.add('has-smooth-scroll')
- 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)
}
}
}
-
-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/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
diff --git a/yarn.lock b/yarn.lock
index 805bbe7..e69de29 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1,6034 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# 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"
- 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"
-
-"@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"
- 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"
- dependencies:
- "@babel/types" "^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/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"
- dependencies:
- "@babel/compat-data" "^7.16.4"
- "@babel/helper-validator-option" "^7.16.7"
- "browserslist" "^4.17.5"
- "semver" "^6.3.0"
-
-"@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-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"
- 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"
-
-"@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"
- dependencies:
- "@babel/helper-get-function-arity" "^7.16.7"
- "@babel/template" "^7.16.7"
- "@babel/types" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/types" "^7.16.7"
-
-"@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-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"
- dependencies:
- "@babel/types" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/types" "^7.16.7"
-
-"@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"
- 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/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"
- 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"
- 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/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"
- dependencies:
- "@babel/types" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/types" "^7.16.0"
-
-"@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-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/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"
- dependencies:
- "@babel/helper-validator-identifier" "^7.16.7"
- "chalk" "^2.0.0"
- "js-tokens" "^4.0.0"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- 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/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"
- 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/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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
- "@babel/plugin-syntax-dynamic-import" "^7.8.3"
-
-"@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/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/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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
- "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
- "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-
-"@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/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"
- 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/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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
- "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-
-"@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"
- 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/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-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"
- 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"
- 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"
- 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"
- 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"
- 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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.3"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.8.0"
-
-"@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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- 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/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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- 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/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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- 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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-compilation-targets" "^7.16.7"
- "@babel/helper-function-name" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-module-transforms" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
- "babel-plugin-dynamic-import-node" "^2.3.3"
-
-"@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"
- 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/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"
- 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/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"
- dependencies:
- "@babel/helper-module-transforms" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
- "@babel/helper-replace-supers" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "regenerator-transform" "^0.14.2"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.16.7"
- "@babel/helper-plugin-utils" "^7.16.7"
-
-"@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"
- 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/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-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-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/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/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"
- 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/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"
- dependencies:
- "regenerator-runtime" "^0.13.4"
-
-"@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"
- dependencies:
- "@babel/code-frame" "^7.16.7"
- "@babel/parser" "^7.16.7"
- "@babel/types" "^7.16.7"
-
-"@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"
- dependencies:
- "@babel/helper-validator-identifier" "^7.16.7"
- "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"
-
-"@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"
-
-"@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"
- dependencies:
- "@humanwhocodes/object-schema" "^1.2.0"
- "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"
-
-"@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/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"
-
-"@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"
- dependencies:
- "@jridgewell/resolve-uri" "^3.0.3"
- "@jridgewell/sourcemap-codec" "^1.4.10"
-
-"@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"
- dependencies:
- "@gar/promisify" "^1.0.1"
- "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"
- dependencies:
- "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"
- dependencies:
- "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"
- 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"
- 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"
- 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/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"
- dependencies:
- "@rollup/pluginutils" "^3.1.0"
- "magic-string" "^0.25.7"
-
-"@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"
- dependencies:
- "@types/estree" "0.0.39"
- "estree-walker" "^1.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"
- dependencies:
- "estree-walker" "^2.0.1"
- "picomatch" "^2.2.2"
-
-"@tootallnate/once@1":
- "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
- "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz"
- "version" "1.1.2"
-
-"@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"
-
-"@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"
-
-"@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"
-
-"@types/node@*":
- "integrity" "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g=="
- "resolved" "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz"
- "version" "14.14.41"
-
-"@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"
-
-"@types/resolve@1.17.1":
- "integrity" "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw=="
- "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz"
- "version" "1.17.1"
- 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"
-
-"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"
-
-"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"
-
-"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"
- 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"
- 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"
- 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"
-
-"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"
-
-"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"
- dependencies:
- "number-is-nan" "^1.0.0"
-
-"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"
-
-"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"
- dependencies:
- "is-extglob" "^2.1.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"
-
-"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"
- dependencies:
- "has-tostringtag" "^1.0.0"
-
-"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"
- 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"
-
-"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-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"
- 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"
- dependencies:
- "is-unc-path" "^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"
- dependencies:
- "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"
- dependencies:
- "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"
- dependencies:
- "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"
- 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":
- "integrity" "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
- "version" "1.0.0"
-
-"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"
- 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"
-
-"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"
- dependencies:
- "call-bind" "^1.0.2"
-
-"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", "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":
- "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
- "version" "2.0.0"
-
-"isobject@^2.0.0":
- "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk="
- "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz"
- "version" "2.1.0"
- 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"
-
-"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"
- 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"
- 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"
- 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"
- "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"
-
-"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"
- dependencies:
- "lcid" "^1.0.0"
-
-"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"
- dependencies:
- "p-try" "^2.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"
- dependencies:
- "p-limit" "^2.2.0"
-
-"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"
-
-"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"
-
-"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"
- dependencies:
- "callsites" "^3.0.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"
- dependencies:
- "is-absolute" "^1.0.0"
- "map-cache" "^0.2.0"
- "path-root" "^0.1.1"
-
-"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"
- dependencies:
- "error-ex" "^1.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"
- 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"
- 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"
-
-"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"
- 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"
-
-"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"
-
-"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"
- 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"
- 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"
- 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"
- dependencies:
- "js-base64" "^2.4.3"
- "source-map" "^0.7.1"
-
-"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"
- 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"
-
-"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"
- dependencies:
- "lru-cache" "^6.0.0"
-
-"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"
- dependencies:
- "lru-cache" "^6.0.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"
-
-"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"
-
-"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"
- dependencies:
- "define-property" "^2.0.2"
- "extend-shallow" "^3.0.2"
- "regex-not" "^1.0.2"
- "safe-regex" "^1.1.0"
-
-"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"
- dependencies:
- "through2" "^2.0.3"
-
-"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"
- dependencies:
- "psl" "^1.1.28"
- "punycode" "^2.1.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"
-
-"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"
- dependencies:
- "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"
- 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"