├── .editorconfig ├── .eslintrc ├── .gitignore ├── LICENSE ├── README.md ├── dist ├── index.js └── index.js.map ├── examples └── index.html ├── package.json └── src ├── index.js └── range.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | indent_size = 4 6 | indent_style = tab 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.yml] 15 | indent_style = space 16 | 17 | [package.json] 18 | indent_size = 2 19 | indent_style = space 20 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "espree", 3 | "parserOptions": { 4 | "ecmaVersion": 6, 5 | "sourceType": "module" 6 | }, 7 | "env": { 8 | "browser": true, 9 | "es6": true, 10 | "node": true 11 | }, 12 | "extends": "eslint:recommended", 13 | "rules": { 14 | "eol-last": 2, 15 | "eqeqeq": 2, 16 | "indent": [2, "tab", {"SwitchCase": 1}], 17 | "keyword-spacing": 2, 18 | "no-console": 0, 19 | "no-debugger": 0, 20 | "no-extra-parens": 2, 21 | "no-multi-spaces": 0, 22 | "no-spaced-func": 2, 23 | "no-trailing-spaces": 2, 24 | "no-var": 2, 25 | "prefer-template": 2, 26 | "prefer-arrow-callback": 2, 27 | "quotes": [2, "single"], 28 | "semi": [2, "always"], 29 | "space-before-blocks": 2, 30 | "space-before-function-paren": [2, "never"], 31 | "space-infix-ops": 2, 32 | "space-unary-ops": 2 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Corentin FARDEAU 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | horizontal-scroll 2 | ===== 3 | 4 | ### Installation 5 | 6 | ``` 7 | npm install -S horizontal-scroll 8 | ``` 9 | 10 | ### Usage & API 11 | 12 | HTML 13 | ```html 14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | ``` 22 | 23 | Javascript 24 | ```javascript 25 | var blocks = document.getElementsByClassName('block'); 26 | var container = document.getElementsByClassName('container'); 27 | var hs = new HorizontalScroll.default({ 28 | blocks : blocks, 29 | container: container, 30 | }); 31 | 32 | ``` 33 | 34 | ### Options 35 | 36 | #### container `Node DOM` `null` 37 | The list container. 38 | 39 | #### blocks `Node DOM` `null` 40 | Item in the list. 41 | 42 | #### isAnimated `Boolean` `false` 43 | If true, the list should have a skew relative to the scroll speed. 44 | 45 | #### spring `Number` `0.1` 46 | Friction of the scroll. 47 | 48 | #### skewReducer `Number` `20` 49 | Strength of the skew effect. 50 | 51 | #### skewLimit `Number` `20` 52 | Limit value of the skew effect. 53 | 54 | ### Example 55 | https://corentinfardeau.github.io/horizontal-scroll/ 56 | 57 | ### License 58 | MIT. 59 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | !function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.HorizontalScroll=t()}}(function(){return function t(e,n,i){function r(o,a){if(!n[o]){if(!e[o]){var l="function"==typeof require&&require;if(!a&&l)return l(o,!0);if(s)return s(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var h=n[o]={exports:{}};e[o][0].call(h.exports,function(t){var n=e[o][1][t];return r(n?n:t)},h,h.exports,t,e,n,i)}return n[o].exports}for(var s="function"==typeof require&&require,o=0;ot||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},i.prototype.emit=function(t){var e,n,i,s,l,u;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if(e=arguments[1],e instanceof Error)throw e;var h=new Error('Uncaught, unspecified "error" event. ('+e+")");throw h.context=e,h}if(n=this._events[t],a(n))return!1;if(r(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),n.apply(this,s)}else if(o(n))for(s=Array.prototype.slice.call(arguments,1),u=n.slice(),i=u.length,l=0;i>l;l++)u[l].apply(this,s);return!0},i.prototype.addListener=function(t,e){var n;if(!r(e))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,r(e.listener)?e.listener:e),this._events[t]?o(this._events[t])?this._events[t].push(e):this._events[t]=[this._events[t],e]:this._events[t]=e,o(this._events[t])&&!this._events[t].warned&&(n=a(this._maxListeners)?i.defaultMaxListeners:this._maxListeners,n&&n>0&&this._events[t].length>n&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace())),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(t,e){function n(){this.removeListener(t,n),i||(i=!0,e.apply(this,arguments))}if(!r(e))throw TypeError("listener must be a function");var i=!1;return n.listener=e,this.on(t,n),this},i.prototype.removeListener=function(t,e){var n,i,s,a;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(n=this._events[t],s=n.length,i=-1,n===e||r(n.listener)&&n.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(n)){for(a=s;a-->0;)if(n[a]===e||n[a].listener&&n[a].listener===e){i=a;break}if(0>i)return this;1===n.length?(n.length=0,delete this._events[t]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},i.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[t],r(n))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},i.prototype.listeners=function(t){var e;return e=this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},i.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},i.listenerCount=function(t,e){return t.listenerCount(e)}},{}],3:[function(t,e,n){(function(){var t;t="undefined"!=typeof n&&null!==n?n:this,t.Lethargy=function(){function t(t,e,n,i){this.stability=null!=t?Math.abs(t):8,this.sensitivity=null!=e?1+Math.abs(e):100,this.tolerance=null!=n?1+Math.abs(n):1.1,this.delay=null!=i?i:150,this.lastUpDeltas=function(){var t,e,n;for(n=[],t=1,e=2*this.stability;e>=1?e>=t:t>=e;e>=1?t++:t--)n.push(null);return n}.call(this),this.lastDownDeltas=function(){var t,e,n;for(n=[],t=1,e=2*this.stability;e>=1?e>=t:t>=e;e>=1?t++:t--)n.push(null);return n}.call(this),this.deltasTimestamp=function(){var t,e,n;for(n=[],t=1,e=2*this.stability;e>=1?e>=t:t>=e;e>=1?t++:t--)n.push(null);return n}.call(this)}return t.prototype.check=function(t){var e;return t=t.originalEvent||t,null!=t.wheelDelta?e=t.wheelDelta:null!=t.deltaY?e=-40*t.deltaY:(null!=t.detail||0===t.detail)&&(e=-40*t.detail),this.deltasTimestamp.push(Date.now()),this.deltasTimestamp.shift(),e>0?(this.lastUpDeltas.push(e),this.lastUpDeltas.shift(),this.isInertia(1)):(this.lastDownDeltas.push(e),this.lastDownDeltas.shift(),this.isInertia(-1))},t.prototype.isInertia=function(t){var e,n,i,r,s,o,a;return e=-1===t?this.lastDownDeltas:this.lastUpDeltas,null===e[0]?t:this.deltasTimestamp[2*this.stability-2]+this.delay>Date.now()&&e[0]===e[2*this.stability-1]?!1:(i=e.slice(0,this.stability),n=e.slice(this.stability,2*this.stability),a=i.reduce(function(t,e){return t+e}),s=n.reduce(function(t,e){return t+e}),o=a/i.length,r=s/n.length,Math.abs(o)n;n++)e["_"+String.fromCharCode(n)]=n;var i=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==i.join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(t){r[t]=t}),"abcdefghijklmnopqrst"!==Object.keys(Object.assign({},r)).join("")?!1:!0}catch(s){return!1}}var s=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=r()?Object.assign:function(t,e){for(var n,r,l=i(t),u=1;u1)for(var n=1;ni;i++)n[i].fn.apply(n[i].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),i=n[t],r=[];if(i&&e)for(var s=0,o=i.length;o>s;s++)i[s].fn!==e&&i[s].fn._!==e&&r.push(i[s]);return r.length?n[t]=r:delete n[t],this}},e.exports=i},{}],10:[function(t,e,n){"use strict";e.exports=function(t){return JSON.parse(JSON.stringify(t))}},{}],11:[function(t,e,n){"use strict";function i(t){l(this,"_onWheel","_onMouseWheel","_onTouchStart","_onTouchMove","_onKeyDown"),this.el=window,t&&t.el&&(this.el=t.el,delete t.el),this.options=r({mouseMultiplier:1,touchMultiplier:2,firefoxMultiplier:15,keyStep:120,preventTouch:!1,unpreventTouchClass:"vs-touchmove-allowed",limitInertia:!1},t),this.options.limitInertia&&(this._lethargy=new o),this._emitter=new s,this._event={y:0,x:0,deltaX:0,deltaY:0},this.touchStartX=null,this.touchStartY=null,this.bodyTouchAction=null}var r=t("object-assign"),s=t("tiny-emitter"),o=t("lethargy").Lethargy,a=t("./support"),l=(t("./clone"),t("bindall-standalone")),u="virtualscroll";e.exports=i;var h={LEFT:37,UP:38,RIGHT:39,DOWN:40};i.prototype._notify=function(t){var e=this._event;e.x+=e.deltaX,e.y+=e.deltaY,this._emitter.emit(u,{x:e.x,y:e.y,deltaX:e.deltaX,deltaY:e.deltaY,originalEvent:t})},i.prototype._onWheel=function(t){var e=this.options;if(!this._lethargy||this._lethargy.check(t)!==!1){var n=this._event;n.deltaX=t.wheelDeltaX||-1*t.deltaX,n.deltaY=t.wheelDeltaY||-1*t.deltaY,a.isFirefox&&1==t.deltaMode&&(n.deltaX*=e.firefoxMultiplier,n.deltaY*=e.firefoxMultiplier),n.deltaX*=e.mouseMultiplier,n.deltaY*=e.mouseMultiplier,this._notify(t)}},i.prototype._onMouseWheel=function(t){if(!this.options.limitInertia||this._lethargy.check(t)!==!1){var e=this._event;e.deltaX=t.wheelDeltaX?t.wheelDeltaX:0,e.deltaY=t.wheelDeltaY?t.wheelDeltaY:t.wheelDelta,this._notify(t)}},i.prototype._onTouchStart=function(t){var e=t.targetTouches?t.targetTouches[0]:t;this.touchStartX=e.pageX,this.touchStartY=e.pageY},i.prototype._onTouchMove=function(t){var e=this.options;e.preventTouch&&!t.target.classList.contains(e.unpreventTouchClass)&&t.preventDefault();var n=this._event,i=t.targetTouches?t.targetTouches[0]:t;n.deltaX=(i.pageX-this.touchStartX)*e.touchMultiplier,n.deltaY=(i.pageY-this.touchStartY)*e.touchMultiplier,this.touchStartX=i.pageX,this.touchStartY=i.pageY,this._notify(t)},i.prototype._onKeyDown=function(t){var e=this._event;switch(e.deltaX=e.deltaY=0,t.keyCode){case h.LEFT:case h.UP:e.deltaY=this.options.keyStep;break;case h.RIGHT:case h.DOWN:e.deltaY=-this.options.keyStep;break;default:return}this._notify(t)},i.prototype._bind=function(){a.hasWheelEvent&&this.el.addEventListener("wheel",this._onWheel),a.hasMouseWheelEvent&&this.el.addEventListener("mousewheel",this._onMouseWheel),a.hasTouch&&(this.el.addEventListener("touchstart",this._onTouchStart),this.el.addEventListener("touchmove",this._onTouchMove)),a.hasPointer&&a.hasTouchWin&&(this.bodyTouchAction=document.body.style.msTouchAction,document.body.style.msTouchAction="none",this.el.addEventListener("MSPointerDown",this._onTouchStart,!0),this.el.addEventListener("MSPointerMove",this._onTouchMove,!0)),a.hasKeyDown&&document.addEventListener("keydown",this._onKeyDown)},i.prototype._unbind=function(){a.hasWheelEvent&&this.el.removeEventListener("wheel",this._onWheel),a.hasMouseWheelEvent&&this.el.removeEventListener("mousewheel",this._onMouseWheel),a.hasTouch&&(this.el.removeEventListener("touchstart",this._onTouchStart),this.el.removeEventListener("touchmove",this._onTouchMove)),a.hasPointer&&a.hasTouchWin&&(document.body.style.msTouchAction=this.bodyTouchAction,this.el.removeEventListener("MSPointerDown",this._onTouchStart,!0),this.el.removeEventListener("MSPointerMove",this._onTouchMove,!0)),a.hasKeyDown&&document.removeEventListener("keydown",this._onKeyDown)},i.prototype.on=function(t,e){this._emitter.on(u,t,e);var n=this._emitter.e;n&&n[u]&&1===n[u].length&&this._bind()},i.prototype.off=function(t,e){this._emitter.off(u,t,e);var n=this._emitter.e;(!n[u]||n[u].length<=0)&&this._unbind()},i.prototype.reset=function(){var t=this._event;t.x=0,t.y=0},i.prototype.destroy=function(){this._emitter.off(),this._unbind()}},{"./clone":10,"./support":12,"bindall-standalone":1,lethargy:3,"object-assign":4,"tiny-emitter":9}],12:[function(t,e,n){"use strict";e.exports=function(){return{hasWheelEvent:"onwheel"in document,hasMouseWheelEvent:"onmousewheel"in document,hasTouch:"ontouchstart"in document,hasTouchWin:navigator.msMaxTouchPoints&&navigator.msMaxTouchPoints>1,hasPointer:!!window.navigator.msPointerEnabled,hasKeyDown:"onkeydown"in document,isFirefox:navigator.userAgent.indexOf("Firefox")>-1}}()},{}],13:[function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=("undefined"==typeof e?"undefined":a(e))&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof e?"undefined":a(e)));t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Object.defineProperty(n,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n0?this.vars.direction=1:this.vars.direction=-1,this.vars.scrollTarget+=-1*t.deltaY,this.vars.scrollTarget=Math.round(Math.max(this.vars.scrollLeft,Math.min(this.vars.scrollTarget,this.vars.scrollRight)))}},{key:"_update",value:function(){this.vars.scrollValue+=(this.vars.scrollTarget-this.vars.scrollValue)*this.vars.spring;var t=this.vars.scrollTarget-this.vars.scrollValue,e=t/this.options.skewReducer;this.vars.speed=this._clamp(-e,-this.options.skewLimit,this.options.skewLimit),this.options.isAnimated?this.wrapper.style[this.transform]="translate3d(-"+this.vars.scrollValue+"px, 0 ,0) skewX("+this.vars.speed+"deg)":this.wrapper.style[this.transform]="translate3d(-"+this.vars.scrollValue+"px, 0 ,0)",this.vars.oldScrollValue=this.vars.scrollValue,this.raf(this._update)}},{key:"_clamp",value:function(t,e,n){return Math.min(Math.max(t,e),n)}},{key:"onResize",value:function(){this.vars.scrollLeft=0,this.vars.scrollRight=this.wrapper.getBoundingClientRect().width-window.innerWidth}},{key:"destroy",value:function(){this._removeEvents()}}]),e}(u.EventEmitter);n["default"]=y},{events:2,prefix:6,raf:8,"virtual-scroll":11}]},{},[13])(13)}); 2 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /dist/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"generated.js","sources":["node_modules/browser-pack/_prelude.js","node_modules/bindall-standalone/index.js","node_modules/events/events.js","node_modules/lethargy/lethargy.js","node_modules/object-assign/index.js","node_modules/performance-now/lib/performance-now.js","node_modules/prefix/index.js","node_modules/process/browser.js","node_modules/raf/index.js","node_modules/tiny-emitter/index.js","node_modules/virtual-scroll/src/clone.js","node_modules/virtual-scroll/src/index.js","node_modules/virtual-scroll/src/support.js","src/index.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","HorizontalScroll","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"bind","func","context","apply","arguments","toString","Object","prototype","hasOwnProperty","object","console","warn","functions","Array","slice","method","push","EventEmitter","_events","_maxListeners","undefined","isFunction","arg","isNumber","isObject","isUndefined","defaultMaxListeners","setMaxListeners","isNaN","TypeError","emit","type","er","handler","len","args","listeners","error","err","addListener","listener","m","newListener","warned","trace","on","once","removeListener","fired","list","position","splice","removeAllListeners","key","ret","listenerCount","evlistener","emitter","root","Lethargy","stability","sensitivity","tolerance","delay","Math","abs","lastUpDeltas","ref","results","lastDownDeltas","deltasTimestamp","check","lastDelta","originalEvent","wheelDelta","deltaY","detail","Date","now","shift","isInertia","direction","lastDeltas","lastDeltasNew","lastDeltasOld","newAverage","newSum","oldAverage","oldSum","reduce","showLastUpDeltas","showLastDownDeltas","toObject","val","shouldUseNative","assign","test1","String","getOwnPropertyNames","test2","fromCharCode","order2","map","join","test3","split","forEach","letter","keys","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","target","source","from","symbols","to","getNanoSeconds","hrtime","loadTime","performance","process","hr","getTime","prefix","replace","_","char","toUpperCase","style","Key","charAt","prefixes","name","prefixMemozied","memo","prefixDashed","upper","test","lastIndex","toLowerCase","document","createElement","dash","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","run","Item","array","noop","nextTick","title","browser","env","argv","version","versions","off","binding","cwd","chdir","dir","umask","vendors","suffix","raf","caf","last","id","frameDuration","callback","_now","next","max","cp","cancelled","round","handle","fn","cancel","polyfill","requestAnimationFrame","cancelAnimationFrame","E","ctx","data","evtArr","evts","liveEvents","JSON","parse","stringify","VirtualScroll","options","bindAll","el","objectAssign","mouseMultiplier","touchMultiplier","firefoxMultiplier","keyStep","preventTouch","unpreventTouchClass","limitInertia","_lethargy","_emitter","Emitter","_event","y","x","deltaX","touchStartX","touchStartY","bodyTouchAction","support","EVT_ID","keyCodes","LEFT","UP","RIGHT","DOWN","_notify","evt","_onWheel","wheelDeltaX","wheelDeltaY","isFirefox","deltaMode","_onMouseWheel","_onTouchStart","targetTouches","pageX","pageY","_onTouchMove","classList","contains","preventDefault","_onKeyDown","keyCode","_bind","hasWheelEvent","addEventListener","hasMouseWheelEvent","hasTouch","hasPointer","hasTouchWin","body","msTouchAction","hasKeyDown","_unbind","removeEventListener","cb","events","reset","destroy","navigator","msMaxTouchPoints","msPointerEnabled","userAgent","indexOf","_virtualScroll","_raf","_prefix","_classCallCheck","_possibleConstructorReturn","__proto__","getPrototypeOf","container","blocks","isAnimated","spring","skewReducer","skewLimit","vars","scrollValue","oldScrollValue","scrollTarget","scrollLeft","scrollRight","speed","speedTarget","wrapper","setAttribute","vs","_virtualScroll2","transform","_prefix2","_raf2","_setUI","_addEvents","onResize","_update","_onScroll","top","left","backface-visibility","will-change","white-space","display","replaceChild","appendChild","min","_clamp","getBoundingClientRect","width","innerWidth","_removeEvents"],"mappings":"AAAA,CAAA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,iBAAAV,MAAA,WAAA,MAAA,SAAAW,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAP,EAAAjB,EAAAD,GCAA,YAgCA,SAAA0B,GAAAC,EAAAC,GACA,MAAA,YACA,MAAAD,GAAAE,MAAAD,EAAAE,YAhCA,GAAAC,GAAAC,OAAAC,UAAAF,SACAG,EAAAF,OAAAC,UAAAC,cAEAjC,GAAAD,QAAA,SAAAmC,GACA,IAAAA,EAAA,MAAAC,SAAAC,KAAA,0CAEA,IAAAC,GAAAC,MAAAN,UAAAO,MAAAjB,KAAAO,UAAA,EAEA,IAAA,IAAAQ,EAAAd,OAEA,IAAA,GAAAiB,KAAAN,GACAD,EAAAX,KAAAY,EAAAM,IACA,kBAAAN,GAAAM,IAAA,qBAAAV,EAAAR,KAAAY,EAAAM,KACAH,EAAAI,KAAAD,EAMA,KAAA,GAAAtB,GAAA,EAAAA,EAAAmB,EAAAd,OAAAL,IAAA,CACA,GAAApB,GAAAuC,EAAAnB,EACAgB,GAAApC,GAAA2B,EAAAS,EAAApC,GAAAoC,6BCFA,QAAAQ,KACAnC,KAAAoC,QAAApC,KAAAoC,YACApC,KAAAqC,cAAArC,KAAAqC,eAAAC,OAwQA,QAAAC,GAAAC,GACA,MAAA,kBAAAA,GAGA,QAAAC,GAAAD,GACA,MAAA,gBAAAA,GAGA,QAAAE,GAAAF,GACA,MAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAG,GAAAH,GACA,MAAA,UAAAA,EAnRA/C,EAAAD,QAAA2C,EAGAA,EAAAA,aAAAA,EAEAA,EAAAV,UAAAW,QAAAE,OACAH,EAAAV,UAAAY,cAAAC,OAIAH,EAAAS,oBAAA,GAIAT,EAAAV,UAAAoB,gBAAA,SAAAzC,GACA,IAAAqC,EAAArC,IAAA,EAAAA,GAAA0C,MAAA1C,GACA,KAAA2C,WAAA,8BAEA,OADA/C,MAAAqC,cAAAjC,EACAJ,MAGAmC,EAAAV,UAAAuB,KAAA,SAAAC,GACA,GAAAC,GAAAC,EAAAC,EAAAC,EAAA1C,EAAA2C,CAMA,IAJAtD,KAAAoC,UACApC,KAAAoC,YAGA,UAAAa,KACAjD,KAAAoC,QAAAmB,OACAb,EAAA1C,KAAAoC,QAAAmB,SAAAvD,KAAAoC,QAAAmB,MAAAvC,QAAA,CAEA,GADAkC,EAAA5B,UAAA,GACA4B,YAAAtC,OACA,KAAAsC,EAGA,IAAAM,GAAA,GAAA5C,OAAA,yCAAAsC,EAAA,IAEA,MADAM,GAAApC,QAAA8B,EACAM,EAOA,GAFAL,EAAAnD,KAAAoC,QAAAa,GAEAN,EAAAQ,GACA,OAAA,CAEA,IAAAZ,EAAAY,GACA,OAAA7B,UAAAN,QAEA,IAAA,GACAmC,EAAApC,KAAAf,KACA,MACA,KAAA,GACAmD,EAAApC,KAAAf,KAAAsB,UAAA,GACA,MACA,KAAA,GACA6B,EAAApC,KAAAf,KAAAsB,UAAA,GAAAA,UAAA,GACA,MAEA,SACA+B,EAAAtB,MAAAN,UAAAO,MAAAjB,KAAAO,UAAA,GACA6B,EAAA9B,MAAArB,KAAAqD,OAEA,IAAAX,EAAAS,GAIA,IAHAE,EAAAtB,MAAAN,UAAAO,MAAAjB,KAAAO,UAAA,GACAgC,EAAAH,EAAAnB,QACAoB,EAAAE,EAAAtC,OACAL,EAAA,EAAAyC,EAAAzC,EAAAA,IACA2C,EAAA3C,GAAAU,MAAArB,KAAAqD,EAGA,QAAA,GAGAlB,EAAAV,UAAAgC,YAAA,SAAAR,EAAAS,GACA,GAAAC,EAEA,KAAApB,EAAAmB,GACA,KAAAX,WAAA,8BA2CA,OAzCA/C,MAAAoC,UACApC,KAAAoC,YAIApC,KAAAoC,QAAAwB,aACA5D,KAAAgD,KAAA,cAAAC,EACAV,EAAAmB,EAAAA,UACAA,EAAAA,SAAAA,GAEA1D,KAAAoC,QAAAa,GAGAP,EAAA1C,KAAAoC,QAAAa,IAEAjD,KAAAoC,QAAAa,GAAAf,KAAAwB,GAGA1D,KAAAoC,QAAAa,IAAAjD,KAAAoC,QAAAa,GAAAS,GANA1D,KAAAoC,QAAAa,GAAAS,EASAhB,EAAA1C,KAAAoC,QAAAa,MAAAjD,KAAAoC,QAAAa,GAAAY,SAIAF,EAHAhB,EAAA3C,KAAAqC,eAGAF,EAAAS,oBAFA5C,KAAAqC,cAKAsB,GAAAA,EAAA,GAAA3D,KAAAoC,QAAAa,GAAAjC,OAAA2C,IACA3D,KAAAoC,QAAAa,GAAAY,QAAA,EACAjC,QAAA2B,MAAA,mIAGAvD,KAAAoC,QAAAa,GAAAjC,QACA,kBAAAY,SAAAkC,OAEAlC,QAAAkC,UAKA9D,MAGAmC,EAAAV,UAAAsC,GAAA5B,EAAAV,UAAAgC,YAEAtB,EAAAV,UAAAuC,KAAA,SAAAf,EAAAS,GAMA,QAAA9D,KACAI,KAAAiE,eAAAhB,EAAArD,GAEAsE,IACAA,GAAA,EACAR,EAAArC,MAAArB,KAAAsB,YAVA,IAAAiB,EAAAmB,GACA,KAAAX,WAAA,8BAEA,IAAAmB,IAAA,CAcA,OAHAtE,GAAA8D,SAAAA,EACA1D,KAAA+D,GAAAd,EAAArD,GAEAI,MAIAmC,EAAAV,UAAAwC,eAAA,SAAAhB,EAAAS,GACA,GAAAS,GAAAC,EAAApD,EAAAL,CAEA,KAAA4B,EAAAmB,GACA,KAAAX,WAAA,8BAEA,KAAA/C,KAAAoC,UAAApC,KAAAoC,QAAAa,GACA,MAAAjD,KAMA,IAJAmE,EAAAnE,KAAAoC,QAAAa,GACAjC,EAAAmD,EAAAnD,OACAoD,EAAA,GAEAD,IAAAT,GACAnB,EAAA4B,EAAAT,WAAAS,EAAAT,WAAAA,QACA1D,MAAAoC,QAAAa,GACAjD,KAAAoC,QAAA6B,gBACAjE,KAAAgD,KAAA,iBAAAC,EAAAS,OAEA,IAAAhB,EAAAyB,GAAA,CACA,IAAAxD,EAAAK,EAAAL,IAAA,GACA,GAAAwD,EAAAxD,KAAA+C,GACAS,EAAAxD,GAAA+C,UAAAS,EAAAxD,GAAA+C,WAAAA,EAAA,CACAU,EAAAzD,CACA,OAIA,GAAA,EAAAyD,EACA,MAAApE,KAEA,KAAAmE,EAAAnD,QACAmD,EAAAnD,OAAA,QACAhB,MAAAoC,QAAAa,IAEAkB,EAAAE,OAAAD,EAAA,GAGApE,KAAAoC,QAAA6B,gBACAjE,KAAAgD,KAAA,iBAAAC,EAAAS,GAGA,MAAA1D,OAGAmC,EAAAV,UAAA6C,mBAAA,SAAArB,GACA,GAAAsB,GAAAjB,CAEA,KAAAtD,KAAAoC,QACA,MAAApC,KAGA,KAAAA,KAAAoC,QAAA6B,eAKA,MAJA,KAAA3C,UAAAN,OACAhB,KAAAoC,WACApC,KAAAoC,QAAAa,UACAjD,MAAAoC,QAAAa,GACAjD,IAIA,IAAA,IAAAsB,UAAAN,OAAA,CACA,IAAAuD,IAAAvE,MAAAoC,QACA,mBAAAmC,GACAvE,KAAAsE,mBAAAC,EAIA,OAFAvE,MAAAsE,mBAAA,kBACAtE,KAAAoC,WACApC,KAKA,GAFAsD,EAAAtD,KAAAoC,QAAAa,GAEAV,EAAAe,GACAtD,KAAAiE,eAAAhB,EAAAK,OACA,IAAAA,EAEA,KAAAA,EAAAtC,QACAhB,KAAAiE,eAAAhB,EAAAK,EAAAA,EAAAtC,OAAA,GAIA,cAFAhB,MAAAoC,QAAAa,GAEAjD,MAGAmC,EAAAV,UAAA6B,UAAA,SAAAL,GACA,GAAAuB,EAOA,OAHAA,GAHAxE,KAAAoC,SAAApC,KAAAoC,QAAAa,GAEAV,EAAAvC,KAAAoC,QAAAa,KACAjD,KAAAoC,QAAAa,IAEAjD,KAAAoC,QAAAa,GAAAjB,YAIAG,EAAAV,UAAAgD,cAAA,SAAAxB,GACA,GAAAjD,KAAAoC,QAAA,CACA,GAAAsC,GAAA1E,KAAAoC,QAAAa,EAEA,IAAAV,EAAAmC,GACA,MAAA,EACA,IAAAA,EACA,MAAAA,GAAA1D,OAEA,MAAA,IAGAmB,EAAAsC,cAAA,SAAAE,EAAA1B,GACA,MAAA0B,GAAAF,cAAAxB,6BC3RA,WACA,GAAA2B,EAEAA,GAAA,mBAAApF,IAAA,OAAAA,EAAAA,EAAAQ,KAEA4E,EAAAC,SAAA,WACA,QAAAA,GAAAC,EAAAC,EAAAC,EAAAC,GACAjF,KAAA8E,UAAA,MAAAA,EAAAI,KAAAC,IAAAL,GAAA,EACA9E,KAAA+E,YAAA,MAAAA,EAAA,EAAAG,KAAAC,IAAAJ,GAAA,IACA/E,KAAAgF,UAAA,MAAAA,EAAA,EAAAE,KAAAC,IAAAH,GAAA,IACAhF,KAAAiF,MAAA,MAAAA,EAAAA,EAAA,IACAjF,KAAAoF,aAAA,WACA,GAAAzE,GAAA0E,EAAAC,CAEA,KADAA,KACA3E,EAAA,EAAA0E,EAAA,EAAArF,KAAA8E,UAAAO,GAAA,EAAAA,GAAA1E,EAAAA,GAAA0E,EAAAA,GAAA,EAAA1E,IAAAA,IACA2E,EAAApD,KAAA,KAEA,OAAAoD,IACAvE,KAAAf,MACAA,KAAAuF,eAAA,WACA,GAAA5E,GAAA0E,EAAAC,CAEA,KADAA,KACA3E,EAAA,EAAA0E,EAAA,EAAArF,KAAA8E,UAAAO,GAAA,EAAAA,GAAA1E,EAAAA,GAAA0E,EAAAA,GAAA,EAAA1E,IAAAA,IACA2E,EAAApD,KAAA,KAEA,OAAAoD,IACAvE,KAAAf,MACAA,KAAAwF,gBAAA,WACA,GAAA7E,GAAA0E,EAAAC,CAEA,KADAA,KACA3E,EAAA,EAAA0E,EAAA,EAAArF,KAAA8E,UAAAO,GAAA,EAAAA,GAAA1E,EAAAA,GAAA0E,EAAAA,GAAA,EAAA1E,IAAAA,IACA2E,EAAApD,KAAA,KAEA,OAAAoD,IACAvE,KAAAf,MA6DA,MA1DA6E,GAAApD,UAAAgE,MAAA,SAAAvF,GACA,GAAAwF,EAWA,OAVAxF,GAAAA,EAAAyF,eAAAzF,EACA,MAAAA,EAAA0F,WACAF,EAAAxF,EAAA0F,WACA,MAAA1F,EAAA2F,OACAH,EAAA,IAAAxF,EAAA2F,QACA,MAAA3F,EAAA4F,QAAA,IAAA5F,EAAA4F,UACAJ,EAAA,IAAAxF,EAAA4F,QAEA9F,KAAAwF,gBAAAtD,KAAA6D,KAAAC,OACAhG,KAAAwF,gBAAAS,QACAP,EAAA,GACA1F,KAAAoF,aAAAlD,KAAAwD,GACA1F,KAAAoF,aAAAa,QACAjG,KAAAkG,UAAA,KAEAlG,KAAAuF,eAAArD,KAAAwD,GACA1F,KAAAuF,eAAAU,QACAjG,KAAAkG,UAAA,MAKArB,EAAApD,UAAAyE,UAAA,SAAAC,GACA,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAEA,OADAN,GAAA,KAAAD,EAAAnG,KAAAuF,eAAAvF,KAAAoF,aACA,OAAAgB,EAAA,GACAD,EAEAnG,KAAAwF,gBAAA,EAAAxF,KAAA8E,UAAA,GAAA9E,KAAAiF,MAAAc,KAAAC,OAAAI,EAAA,KAAAA,EAAA,EAAApG,KAAA8E,UAAA,IACA,GAEAwB,EAAAF,EAAApE,MAAA,EAAAhC,KAAA8E,WACAuB,EAAAD,EAAApE,MAAAhC,KAAA8E,UAAA,EAAA9E,KAAA8E,WACA4B,EAAAJ,EAAAK,OAAA,SAAAxG,EAAAG,GACA,MAAAH,GAAAG,IAEAkG,EAAAH,EAAAM,OAAA,SAAAxG,EAAAG,GACA,MAAAH,GAAAG,IAEAmG,EAAAC,EAAAJ,EAAAtF,OACAuF,EAAAC,EAAAH,EAAArF,OACAkE,KAAAC,IAAAsB,GAAAvB,KAAAC,IAAAoB,EAAAvG,KAAAgF,YAAAhF,KAAA+E,YAAAG,KAAAC,IAAAoB,GACAJ,GAEA,IAIAtB,EAAApD,UAAAmF,iBAAA,WACA,MAAA5G,MAAAoF,cAGAP,EAAApD,UAAAoF,mBAAA,WACA,MAAA7G,MAAAuF,gBAGAV,OAIA9D,KAAAf,8BC9FA,YAMA,SAAA8G,GAAAC,GACA,GAAA,OAAAA,GAAAzE,SAAAyE,EACA,KAAA,IAAAhE,WAAA,wDAGA,OAAAvB,QAAAuF,GAGA,QAAAC,KACA,IACA,IAAAxF,OAAAyF,OACA,OAAA,CAMA,IAAAC,GAAA,GAAAC,QAAA,MAEA,IADAD,EAAA,GAAA,KACA,MAAA1F,OAAA4F,oBAAAF,GAAA,GACA,OAAA,CAKA,KAAA,GADAG,MACA1G,EAAA,EAAA,GAAAA,EAAAA,IACA0G,EAAA,IAAAF,OAAAG,aAAA3G,IAAAA,CAEA,IAAA4G,GAAA/F,OAAA4F,oBAAAC,GAAAG,IAAA,SAAApH,GACA,MAAAiH,GAAAjH,IAEA,IAAA,eAAAmH,EAAAE,KAAA,IACA,OAAA,CAIA,IAAAC,KAIA,OAHA,uBAAAC,MAAA,IAAAC,QAAA,SAAAC,GACAH,EAAAG,GAAAA,IAGA,yBADArG,OAAAsG,KAAAtG,OAAAyF,UAAAS,IAAAD,KAAA,KAEA,GAGA,EACA,MAAAjE,GAEA,OAAA,GApDA,GAAAuE,GAAAvG,OAAAuG,sBACArG,EAAAF,OAAAC,UAAAC,eACAsG,EAAAxG,OAAAC,UAAAwG,oBAsDAxI,GAAAD,QAAAwH,IAAAxF,OAAAyF,OAAA,SAAAiB,EAAAC,GAKA,IAAA,GAJAC,GAEAC,EADAC,EAAAxB,EAAAoB,GAGA5H,EAAA,EAAAA,EAAAgB,UAAAN,OAAAV,IAAA,CACA8H,EAAA5G,OAAAF,UAAAhB,GAEA,KAAA,GAAAiE,KAAA6D,GACA1G,EAAAX,KAAAqH,EAAA7D,KACA+D,EAAA/D,GAAA6D,EAAA7D,GAIA,IAAAwD,EAAA,CACAM,EAAAN,EAAAK,EACA,KAAA,GAAAzH,GAAA,EAAAA,EAAA0H,EAAArH,OAAAL,IACAqH,EAAAjH,KAAAqH,EAAAC,EAAA1H,MACA2H,EAAAD,EAAA1H,IAAAyH,EAAAC,EAAA1H,MAMA,MAAA2H,0CCvFA,WACA,GAAAC,GAAAC,EAAAC,CAEA,oBAAAC,cAAA,OAAAA,aAAAA,YAAA1C,IACAvG,EAAAD,QAAA,WACA,MAAAkJ,aAAA1C,OAEA,mBAAA2C,IAAA,OAAAA,GAAAA,EAAAH,QACA/I,EAAAD,QAAA,WACA,OAAA+I,IAAAE,GAAA,KAEAD,EAAAG,EAAAH,OACAD,EAAA,WACA,GAAAK,EAEA,OADAA,GAAAJ,IACA,IAAAI,EAAA,GAAAA,EAAA,IAEAH,EAAAF,KACAxC,KAAAC,KACAvG,EAAAD,QAAA,WACA,MAAAuG,MAAAC,MAAAyC,GAEAA,EAAA1C,KAAAC,QAEAvG,EAAAD,QAAA,WACA,OAAA,GAAAuG,OAAA8C,UAAAJ,GAEAA,GAAA,GAAA1C,OAAA8C,aAGA9H,KAAAf,mECbA,QAAA8I,GAAAvE,GAOA,GALAA,EAAAA,EAAAwE,QAAA,YAAA,SAAAC,EAAAC,GACA,MAAAA,GAAAC,gBAIA5G,SAAA6G,EAAA5E,GAAA,MAAAA,EAKA,KAFA,GAAA6E,GAAA7E,EAAA8E,OAAA,GAAAH,cAAA3E,EAAAvC,MAAA,GACArB,EAAA2I,EAAAtI,OACAL,KAAA,CACA,GAAA4I,GAAAD,EAAA3I,GAAAyI,CACA,IAAA9G,SAAA6G,EAAAI,GAAA,MAAAA,GAGA,MAAAhF,GAUA,QAAAiF,GAAAjF,GACA,MAAAA,KAAAkF,GACAA,EAAAlF,GACAkF,EAAAlF,GAAAuE,EAAAvE,GAUA,QAAAmF,GAAAnF,GAMA,MALAA,GAAAuE,EAAAvE,GACAoF,EAAAC,KAAArF,KACAA,EAAA,IAAAA,EAAAwE,QAAAY,EAAA,OACAA,EAAAE,UAAA,GAEAtF,EAAAuF,cA/DA,GAAAX,GAAA,mBAAAY,UACAA,SAAAC,cAAA,KAAAb,SAGAG,GAAA,IAAA,KAAA,MAAA,UACAK,EAAA,WACAF,IA4DAhK,GAAAD,QAAAgK,EACA/J,EAAAD,QAAAyK,KAAAP,0BCzDA,QAAAQ,KACA,KAAA,IAAAtJ,OAAA,mCAEA,QAAAuJ,KACA,KAAA,IAAAvJ,OAAA,qCAsBA,QAAAwJ,GAAAC,GACA,GAAAC,IAAAC,WAEA,MAAAA,YAAAF,EAAA,EAGA,KAAAC,IAAAJ,IAAAI,IAAAC,WAEA,MADAD,GAAAC,WACAA,WAAAF,EAAA,EAEA,KAEA,MAAAC,GAAAD,EAAA,GACA,MAAAnK,GACA,IAEA,MAAAoK,GAAAvJ,KAAA,KAAAsJ,EAAA,GACA,MAAAnK,GAEA,MAAAoK,GAAAvJ,KAAAf,KAAAqK,EAAA,KAMA,QAAAG,GAAAC,GACA,GAAAC,IAAAC,aAEA,MAAAA,cAAAF,EAGA,KAAAC,IAAAP,IAAAO,IAAAC,aAEA,MADAD,GAAAC,aACAA,aAAAF,EAEA,KAEA,MAAAC,GAAAD,GACA,MAAAvK,GACA,IAEA,MAAAwK,GAAA3J,KAAA,KAAA0J,GACA,MAAAvK,GAGA,MAAAwK,GAAA3J,KAAAf,KAAAyK,KAYA,QAAAG,KACAC,GAAAC,IAGAD,GAAA,EACAC,EAAA9J,OACA+J,EAAAD,EAAAE,OAAAD,GAEAE,EAAA,GAEAF,EAAA/J,QACAkK,KAIA,QAAAA,KACA,IAAAL,EAAA,CAGA,GAAAM,GAAAf,EAAAQ,EACAC,IAAA,CAGA,KADA,GAAAzH,GAAA2H,EAAA/J,OACAoC,GAAA,CAGA,IAFA0H,EAAAC,EACAA,OACAE,EAAA7H,GACA0H,GACAA,EAAAG,GAAAG,KAGAH,GAAA,GACA7H,EAAA2H,EAAA/J,OAEA8J,EAAA,KACAD,GAAA,EACAL,EAAAW,IAiBA,QAAAE,GAAAhB,EAAAiB,GACAtL,KAAAqK,IAAAA,EACArK,KAAAsL,MAAAA,EAYA,QAAAC,MAhKA,GAOAjB,GACAI,EARA/B,EAAAlJ,EAAAD,YAgBA,WACA,IAEA8K,EADA,kBAAAC,YACAA,WAEAL,EAEA,MAAAhK,GACAoK,EAAAJ,EAEA,IAEAQ,EADA,kBAAAC,cACAA,aAEAR,EAEA,MAAAjK,GACAwK,EAAAP,KAuDA,IAEAW,GAFAC,KACAF,GAAA,EAEAI,EAAA,EAyCAtC,GAAA6C,SAAA,SAAAnB,GACA,GAAAhH,GAAA,GAAAtB,OAAAT,UAAAN,OAAA,EACA,IAAAM,UAAAN,OAAA,EACA,IAAA,GAAAL,GAAA,EAAAA,EAAAW,UAAAN,OAAAL,IACA0C,EAAA1C,EAAA,GAAAW,UAAAX,EAGAoK,GAAA7I,KAAA,GAAAmJ,GAAAhB,EAAAhH,IACA,IAAA0H,EAAA/J,QAAA6J,GACAT,EAAAc,IASAG,EAAA5J,UAAA2J,IAAA,WACApL,KAAAqK,IAAAhJ,MAAA,KAAArB,KAAAsL,QAEA3C,EAAA8C,MAAA,UACA9C,EAAA+C,SAAA,EACA/C,EAAAgD,OACAhD,EAAAiD,QACAjD,EAAAkD,QAAA,GACAlD,EAAAmD,YAIAnD,EAAA5E,GAAAwH,EACA5C,EAAAlF,YAAA8H,EACA5C,EAAA3E,KAAAuH,EACA5C,EAAAoD,IAAAR,EACA5C,EAAA1E,eAAAsH,EACA5C,EAAArE,mBAAAiH,EACA5C,EAAA3F,KAAAuI,EAEA5C,EAAAqD,QAAA,SAAAzC,GACA,KAAA,IAAA3I,OAAA,qCAGA+H,EAAAsD,IAAA,WAAA,MAAA,KACAtD,EAAAuD,MAAA,SAAAC,GACA,KAAA,IAAAvL,OAAA,mCAEA+H,EAAAyD,MAAA,WAAA,MAAA,yCC5KA,IAAA,GAPApG,GAAAtF,EAAA,mBACAkE,EAAA,mBAAA/E,QAAAC,EAAAD,OACAwM,GAAA,MAAA,UACAC,EAAA,iBACAC,EAAA3H,EAAA,UAAA0H,GACAE,EAAA5H,EAAA,SAAA0H,IAAA1H,EAAA,gBAAA0H,GAEA3L,EAAA,GAAA4L,GAAA5L,EAAA0L,EAAArL,OAAAL,IACA4L,EAAA3H,EAAAyH,EAAA1L,GAAA,UAAA2L,GACAE,EAAA5H,EAAAyH,EAAA1L,GAAA,SAAA2L,IACA1H,EAAAyH,EAAA1L,GAAA,gBAAA2L,EAIA,KAAAC,IAAAC,EAAA,CACA,GAAAC,GAAA,EACAC,EAAA,EACA3B,KACA4B,EAAA,IAAA,EAEAJ,GAAA,SAAAK,GACA,GAAA,IAAA7B,EAAA/J,OAAA,CACA,GAAA6L,GAAA7G,IACA8G,EAAA5H,KAAA6H,IAAA,EAAAJ,GAAAE,EAAAJ,GACAA,GAAAK,EAAAD,EACAtC,WAAA,WACA,GAAAyC,GAAAjC,EAAA/I,MAAA,EAIA+I,GAAA/J,OAAA,CACA,KAAA,GAAAL,GAAA,EAAAA,EAAAqM,EAAAhM,OAAAL,IACA,IAAAqM,EAAArM,GAAAsM,UACA,IACAD,EAAArM,GAAAiM,SAAAH,GACA,MAAAvM,GACAqK,WAAA,WAAA,KAAArK,IAAA,KAIAgF,KAAAgI,MAAAJ,IAOA,MALA/B,GAAA7I,MACAiL,SAAAT,EACAE,SAAAA,EACAK,WAAA,IAEAP,GAGAF,EAAA,SAAAW,GACA,IAAA,GAAAxM,GAAA,EAAAA,EAAAoK,EAAA/J,OAAAL,IACAoK,EAAApK,GAAAwM,SAAAA,IACApC,EAAApK,GAAAsM,WAAA,IAMAxN,EAAAD,QAAA,SAAA4N,GAIA,MAAAb,GAAAxL,KAAA6D,EAAAwI,IAEA3N,EAAAD,QAAA6N,OAAA,WACAb,EAAAnL,MAAAuD,EAAAtD,YAEA7B,EAAAD,QAAA8N,SAAA,WACA1I,EAAA2I,sBAAAhB,EACA3H,EAAA4I,qBAAAhB,gKCtEA,QAAAiB,MAKAA,EAAAhM,WACAsC,GAAA,SAAAwF,EAAAqD,EAAAc,GACA,GAAAxN,GAAAF,KAAAE,IAAAF,KAAAE,KAOA,QALAA,EAAAqJ,KAAArJ,EAAAqJ,QAAArH,MACAkL,GAAAR,EACAc,IAAAA,IAGA1N,MAGAgE,KAAA,SAAAuF,EAAAqD,EAAAc,GAEA,QAAAhK,KACA3D,EAAAgM,IAAAxC,EAAA7F,GACAkJ,EAAAvL,MAAAqM,EAAApM,WAHA,GAAAvB,GAAAC,IAOA,OADA0D,GAAAsF,EAAA4D,EACA5M,KAAA+D,GAAAwF,EAAA7F,EAAAgK,IAGA1K,KAAA,SAAAuG,GACA,GAAAoE,MAAA3L,MAAAjB,KAAAO,UAAA,GACAsM,IAAA5N,KAAAE,IAAAF,KAAAE,OAAAqJ,QAAAvH,QACArB,EAAA,EACAyC,EAAAwK,EAAA5M,MAEA,KAAAL,EAAAyC,EAAAzC,EAAAA,IACAiN,EAAAjN,GAAAyM,GAAA/L,MAAAuM,EAAAjN,GAAA+M,IAAAC,EAGA,OAAA3N,OAGA+L,IAAA,SAAAxC,EAAAqD,GACA,GAAA1M,GAAAF,KAAAE,IAAAF,KAAAE,MACA2N,EAAA3N,EAAAqJ,GACAuE,IAEA,IAAAD,GAAAjB,EACA,IAAA,GAAAjM,GAAA,EAAAyC,EAAAyK,EAAA7M,OAAAoC,EAAAzC,EAAAA,IACAkN,EAAAlN,GAAAyM,KAAAR,GAAAiB,EAAAlN,GAAAyM,GAAApE,IAAA4D,GACAkB,EAAA5L,KAAA2L,EAAAlN,GAYA,OAJAmN,GAAA,OACA5N,EAAAqJ,GAAAuE,QACA5N,GAAAqJ,GAEAvJ,OAIAP,EAAAD,QAAAiO,2BCjEA,YAEAhO,GAAAD,QAAA,SAAA2I,GACA,MAAA4F,MAAAC,MAAAD,KAAAE,UAAA9F,8BCHA,YAmBA,SAAA+F,GAAAC,GACAC,EAAApO,KAAA,WAAA,gBAAA,gBAAA,eAAA,cAEAA,KAAAqO,GAAAxO,OACAsO,GAAAA,EAAAE,KACArO,KAAAqO,GAAAF,EAAAE,SACAF,GAAAE,IAEArO,KAAAmO,QAAAG,GACAC,gBAAA,EACAC,gBAAA,EACAC,kBAAA,GACAC,QAAA,IACAC,cAAA,EACAC,oBAAA,uBACAC,cAAA,GACAV,GAEAnO,KAAAmO,QAAAU,eAAA7O,KAAA8O,UAAA,GAAAjK,IAEA7E,KAAA+O,SAAA,GAAAC,GACAhP,KAAAiP,QACAC,EAAA,EACAC,EAAA,EACAC,OAAA,EACAvJ,OAAA,GAGA7F,KAAAqP,YAAA,KACArP,KAAAsP,YAAA,KACAtP,KAAAuP,gBAAA,KA/CA,GAAAjB,GAAA5N,EAAA,iBACAsO,EAAAtO,EAAA,gBACAmE,EAAAnE,EAAA,YAAAmE,SACA2K,EAAA9O,EAAA,aAEA0N,GADA1N,EAAA,WACAA,EAAA,uBACA+O,EAAA,eAEAhQ,GAAAD,QAAA0O,CAEA,IAAAwB,IACAC,KAAA,GACAC,GAAA,GACAC,MAAA,GACAC,KAAA,GAoCA5B,GAAAzM,UAAAsO,QAAA,SAAA7P,GACA,GAAA8P,GAAAhQ,KAAAiP,MACAe,GAAAb,GAAAa,EAAAZ,OACAY,EAAAd,GAAAc,EAAAnK,OAEA7F,KAAA+O,SAAA/L,KAAAyM,GACAN,EAAAa,EAAAb,EACAD,EAAAc,EAAAd,EACAE,OAAAY,EAAAZ,OACAvJ,OAAAmK,EAAAnK,OACAF,cAAAzF,KAIAgO,EAAAzM,UAAAwO,SAAA,SAAA/P,GACA,GAAAiO,GAAAnO,KAAAmO,OACA,KAAAnO,KAAA8O,WAAA9O,KAAA8O,UAAArJ,MAAAvF,MAAA,EAAA,CAEA,GAAA8P,GAAAhQ,KAAAiP,MAGAe,GAAAZ,OAAAlP,EAAAgQ,aAAA,GAAAhQ,EAAAkP,OACAY,EAAAnK,OAAA3F,EAAAiQ,aAAA,GAAAjQ,EAAA2F,OAIA2J,EAAAY,WAAA,GAAAlQ,EAAAmQ,YACAL,EAAAZ,QAAAjB,EAAAM,kBACAuB,EAAAnK,QAAAsI,EAAAM,mBAGAuB,EAAAZ,QAAAjB,EAAAI,gBACAyB,EAAAnK,QAAAsI,EAAAI,gBAEAvO,KAAA+P,QAAA7P,KAGAgO,EAAAzM,UAAA6O,cAAA,SAAApQ,GACA,IAAAF,KAAAmO,QAAAU,cAAA7O,KAAA8O,UAAArJ,MAAAvF,MAAA,EAAA,CAEA,GAAA8P,GAAAhQ,KAAAiP,MAGAe,GAAAZ,OAAAlP,EAAA,YAAAA,EAAAgQ,YAAA,EACAF,EAAAnK,OAAA3F,EAAA,YAAAA,EAAAiQ,YAAAjQ,EAAA0F,WAEA5F,KAAA+P,QAAA7P,KAGAgO,EAAAzM,UAAA8O,cAAA,SAAArQ,GACA,GAAAC,GAAAD,EAAA,cAAAA,EAAAsQ,cAAA,GAAAtQ,CACAF,MAAAqP,YAAAlP,EAAAsQ,MACAzQ,KAAAsP,YAAAnP,EAAAuQ,OAGAxC,EAAAzM,UAAAkP,aAAA,SAAAzQ,GACA,GAAAiO,GAAAnO,KAAAmO,OACAA,GAAAQ,eACAzO,EAAAgI,OAAA0I,UAAAC,SAAA1C,EAAAS,sBACA1O,EAAA4Q,gBAGA,IAAAd,GAAAhQ,KAAAiP,OAEA9O,EAAAD,EAAA,cAAAA,EAAAsQ,cAAA,GAAAtQ,CAEA8P,GAAAZ,QAAAjP,EAAAsQ,MAAAzQ,KAAAqP,aAAAlB,EAAAK,gBACAwB,EAAAnK,QAAA1F,EAAAuQ,MAAA1Q,KAAAsP,aAAAnB,EAAAK,gBAEAxO,KAAAqP,YAAAlP,EAAAsQ,MACAzQ,KAAAsP,YAAAnP,EAAAuQ,MAEA1Q,KAAA+P,QAAA7P,IAGAgO,EAAAzM,UAAAsP,WAAA,SAAA7Q,GACA,GAAA8P,GAAAhQ,KAAAiP,MAGA,QAFAe,EAAAZ,OAAAY,EAAAnK,OAAA,EAEA3F,EAAA8Q,SACA,IAAAtB,GAAAC,KACA,IAAAD,GAAAE,GACAI,EAAAnK,OAAA7F,KAAAmO,QAAAO,OACA,MAEA,KAAAgB,GAAAG,MACA,IAAAH,GAAAI,KACAE,EAAAnK,QAAA7F,KAAAmO,QAAAO,OACA,MAEA,SACA,OAGA1O,KAAA+P,QAAA7P,IAGAgO,EAAAzM,UAAAwP,MAAA,WACAzB,EAAA0B,eAAAlR,KAAAqO,GAAA8C,iBAAA,QAAAnR,KAAAiQ,UACAT,EAAA4B,oBAAApR,KAAAqO,GAAA8C,iBAAA,aAAAnR,KAAAsQ,eAEAd,EAAA6B,WACArR,KAAAqO,GAAA8C,iBAAA,aAAAnR,KAAAuQ,eACAvQ,KAAAqO,GAAA8C,iBAAA,YAAAnR,KAAA2Q,eAGAnB,EAAA8B,YAAA9B,EAAA+B,cACAvR,KAAAuP,gBAAAxF,SAAAyH,KAAArI,MAAAsI,cACA1H,SAAAyH,KAAArI,MAAAsI,cAAA,OACAzR,KAAAqO,GAAA8C,iBAAA,gBAAAnR,KAAAuQ,eAAA,GACAvQ,KAAAqO,GAAA8C,iBAAA,gBAAAnR,KAAA2Q,cAAA,IAGAnB,EAAAkC,YAAA3H,SAAAoH,iBAAA,UAAAnR,KAAA+Q,aAGA7C,EAAAzM,UAAAkQ,QAAA,WACAnC,EAAA0B,eAAAlR,KAAAqO,GAAAuD,oBAAA,QAAA5R,KAAAiQ,UACAT,EAAA4B,oBAAApR,KAAAqO,GAAAuD,oBAAA,aAAA5R,KAAAsQ,eAEAd,EAAA6B,WACArR,KAAAqO,GAAAuD,oBAAA,aAAA5R,KAAAuQ,eACAvQ,KAAAqO,GAAAuD,oBAAA,YAAA5R,KAAA2Q,eAGAnB,EAAA8B,YAAA9B,EAAA+B,cACAxH,SAAAyH,KAAArI,MAAAsI,cAAAzR,KAAAuP,gBACAvP,KAAAqO,GAAAuD,oBAAA,gBAAA5R,KAAAuQ,eAAA,GACAvQ,KAAAqO,GAAAuD,oBAAA,gBAAA5R,KAAA2Q,cAAA,IAGAnB,EAAAkC,YAAA3H,SAAA6H,oBAAA,UAAA5R,KAAA+Q,aAGA7C,EAAAzM,UAAAsC,GAAA,SAAA8N,EAAAnE,GACA1N,KAAA+O,SAAAhL,GAAA0L,EAAAoC,EAAAnE,EAEA,IAAAoE,GAAA9R,KAAA+O,SAAA7O,CACA4R,IAAAA,EAAArC,IAAA,IAAAqC,EAAArC,GAAAzO,QAAAhB,KAAAiR,SAGA/C,EAAAzM,UAAAsK,IAAA,SAAA8F,EAAAnE,GACA1N,KAAA+O,SAAAhD,IAAA0D,EAAAoC,EAAAnE,EAEA,IAAAoE,GAAA9R,KAAA+O,SAAA7O,IACA4R,EAAArC,IAAAqC,EAAArC,GAAAzO,QAAA,IAAAhB,KAAA2R,WAGAzD,EAAAzM,UAAAsQ,MAAA,WACA,GAAA/B,GAAAhQ,KAAAiP,MACAe,GAAAb,EAAA,EACAa,EAAAd,EAAA,GAGAhB,EAAAzM,UAAAuQ,QAAA,WACAhS,KAAA+O,SAAAhD,MACA/L,KAAA2R,oIChNA,YAEAlS,GAAAD,QAAA,WACA,OACA0R,cAAA,WAAAnH,UACAqH,mBAAA,gBAAArH,UACAsH,SAAA,gBAAAtH,UACAwH,YAAAU,UAAAC,kBAAAD,UAAAC,iBAAA,EACAZ,aAAAzR,OAAAoS,UAAAE,iBACAT,WAAA,aAAA3H,UACAqG,UAAA6B,UAAAG,UAAAC,QAAA,WAAA,wtCCVAjQ,EAAA1B,EAAA,UACA4R,EAAA5R,EAAA,yBACA6R,EAAA7R,EAAA,cACA8R,EAAA9R,EAAA,iBAEqBT,EAAA,SAAAC,GAEpB,QAAAC,GAAYD,GAAMuS,EAAAzS,KAAAG,EAAA,IAAAE,GAAAqS,EAAA1S,MAAAG,EAAAwS,WAAAnR,OAAAoR,eAAAzS,IAAAY,KAAAf,MAGjB,OAAAK,GAAK4Q,QAGL5Q,EAAK8N,QAAU3M,OAAOyF,QACrB4L,UAAW3S,EAAK2S,UAChBC,OAAQ5S,EAAK4S,OACbC,WAAY7S,EAAK6S,aAAA,EACjBC,OAAQ9S,EAAK8S,QAAW,GACxBC,YAAa/S,EAAK+S,aAAe,GACjCC,UAAWhT,EAAKgT,WAAa,IAC3BhT,GAEHG,EAAK8S,MACJC,YAAa,EACbC,eAAgB,EAChBC,aAAc,EACdC,WAAY,EACZC,YAAa,EACbR,OAAQ3S,EAAK8N,QAAQ6E,OACrB7M,UAAW,EACXsN,MAAO,EACPC,YAAa,GAGdrT,EAAKsT,QAAU5J,SAASC,cAAc,OACtC3J,EAAKsT,QAAQC,aAAa,QAAS,qBAEnCvT,EAAKwT,GAAK,GAAAC,GAAA,WACVzT,EAAK0T,UAAYC,EAAA,WAAU,aAE3B3T,EAAKkM,IAAL0H,EAAA,WAEA5T,EAAK6T,SACL7T,EAAK8T,aACL9T,EAAK+T,WArCY/T,mDAgDjBL,KAAKqU,QAAUrU,KAAKqU,QAAQnT,KAAKlB,MACjCA,KAAKoU,SAAWpU,KAAKoU,SAASlT,KAAKlB,2CAQnCA,KAAK6T,GAAG9P,GAAG/D,KAAKsU,UAAWtU,MAC3BA,KAAKuM,IAAIvM,KAAKqU,SACdxU,OAAOsR,iBAAiB,SAAUnR,KAAKoU,kDAQvCpU,KAAKuM,IAAIc,OAAOrN,KAAKqU,SACrBrU,KAAKuM,IAAIvM,KAAKqU,SACdxU,OAAO+R,oBAAoB,SAAU5R,KAAKoU,2CAOlC,GAAAlU,GAERF,IAAAwB,QAAOyF,OAAOjH,KAAK2T,QAAQxK,OAC1B/E,SAAU,WACVmQ,IAAK,IACLC,KAAM,IACNC,sBAAuB,SACvBC,cAAe,cAGhBlT,OAAOyF,OAAOjH,KAAKmO,QAAQ0E,UAAU,GAAG1J,OACvCwL,cAAe,SACfvQ,SAAY,aAAArC,MAGPN,UAAUmG,QAAQ7G,KAAKf,KAAKmO,QAAQ2E,OAAQ,SAAA3S,GACjDA,EAAMgJ,MAAMyL,QAAU,eACtB1U,EAAKiO,QAAQ0E,UAAU,GAAGgC,aAAa3U,EAAKyT,QAASxT,GACrDD,EAAKyT,QAAQmB,YAAY3U,KAG1BH,KAAKmO,QAAQ0E,UAAU,GAAGiC,YAAY9U,KAAK2T,2CAQlCzT,GAELA,EAAE2F,OAAS,EACd7F,KAAKmT,KAAKhN,UAAY,EAEtBnG,KAAKmT,KAAKhN,UAAY,GAGvBnG,KAAKmT,KAAKG,cAA2B,GAAXpT,EAAE2F,OAC5B7F,KAAKmT,KAAKG,aAAepO,KAAKgI,MAAMhI,KAAK6H,IAAI/M,KAAKmT,KAAKI,WAAYrO,KAAK6P,IAAI/U,KAAKmT,KAAKG,aAActT,KAAKmT,KAAKK,iDAW9GxT,KAAKmT,KAAKC,cAAgBpT,KAAKmT,KAAKG,aAAetT,KAAKmT,KAAKC,aAAepT,KAAKmT,KAGjFH,MAAA,IAAA9S,GAAYF,KAAKmT,KAAKG,aAAetT,KAAKmT,KAAKC,YAC3CjT,EAAOD,EAAQF,KAAKmO,QACxB8E,WAAAjT,MAAKmT,KAAKM,MAAQzT,KAAKgV,QAAQ7U,GAAOH,KAAKmO,QAAQ+E,UAAWlT,KAAKmO,QAAQ+E,WAGvElT,KAAKmO,QAAQ4E,WAChB/S,KAAK2T,QAAQxK,MAAMnJ,KAAK+T,WAAxB,gBAAqD/T,KAAKmT,KAAKC,YAA/D,mBAA6FpT,KAAKmT,KAAKM,MAAvG,OAEAzT,KAAK2T,QAAQxK,MAAMnJ,KAAK+T,WAAxB,gBAAqD/T,KAAKmT,KAAKC,YAA/D,YAGDpT,KAAKmT,KAAKE,eAAiBrT,KAAKmT,KAAKC,YACrCpT,KAAKuM,IAAIvM,KAAKqU,wCAORnU,EAAKC,EAAKE,GACT,MAAA6E,MAAK6P,IAAI7P,KAAK6H,IAAI7M,EAAKC,GAAME,sCAWpCL,KAAKmT,KAAKI,WAAa,EACvBvT,KAAKmT,KAAKK,YAAcxT,KAAK2T,QAAQsB,wBAAwBC,MAAQrV,OAAOsV,6CAI5EnV,KAAKoV,oDAhGAnV;AZ3EP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ICZA,UAAA,QAAA;IACA,iBAAA,QAAA;;IACA,OAAA,QAAA;;IACA,UAAA,QAAA;;IAEqB;AAEpB,aAAY;AAAM,oBAAA,MAAA,GAAA,QAAA,2BAAA,OAAA,EAAA,aAAA,OAAA,eAAA,IAAA,KAAA,OAGjB,SAAK,SAGL,EAAK,UAAU,OAAO,SACrB,WAAW,EAAK,WAChB,QAAQ,EAAK,QACb,YAAY,EAAK,eAAc,GAC/B,QAAQ,EAAK,UAAW,IACxB,aAAa,EAAK,eAAe,IACjC,WAAW,EAAK,aAAa,MAC3B,IAEH,EAAK,SACJ,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,QAAQ,EAAK,QAAQ,QACrB,WAAW,GACX,OAAO,GACP,aAAa,KAGd,EAAK,UAAU,SAAS,cAAc,QACtC,EAAK,QAAQ,aAAa,SAAS,sBAEnC,EAAK,KAAK,oBAAA,cACV,EAAK,YAAY,SAAA,WAAU,cAE3B,EAAK,MAAL,MAAA,YAEA,EAAK,UACL,EAAK,cACL,EAAK,YArCY;;AAgDjB,WAAK,UAAU,KAAK,QAAQ,KAAK,OACjC,KAAK,WAAW,KAAK,SAAS,KAAK;;AAQnC,WAAK,GAAG,GAAG,KAAK,WAAW,OAC3B,KAAK,IAAI,KAAK,UACd,OAAO,iBAAiB,UAAU,KAAK;;AAQvC,WAAK,IAAI,OAAO,KAAK,UACrB,KAAK,IAAI,KAAK,UACd,OAAO,oBAAoB,UAAU,KAAK;;AAOlC,cAAA,AAER,YAAO,OAAO,KAAK,QAAQ,SAC1B,UAAU,YACV,KAAK,KACL,MAAM,KACN,uBAAuB,UACvB,eAAe,gBAGhB,OAAO,OAAO,KAAK,QAAQ,UAAU,GAAG,SACvC,eAAe,UACf,UAAY,qBAGP,UAAU,QAAQ,KAAK,KAAK,QAAQ,QAAQ,UAAA;AACjD,UAAM,MAAM,UAAU,gBACtB,EAAK,QAAQ,UAAU,GAAG,aAAa,EAAK,SAAS,IACrD,EAAK,QAAQ,YAAY;OAH1B,GAMA,KAAK,QAAQ,UAAU,GAAG,YAAY,KAAK;mDAQlC;AAEL,QAAE,SAAS,IACd,KAAK,KAAK,YAAY,IAEtB,KAAK,KAAK,YAAY,IAGvB,KAAK,KAAK,gBAA2B,KAAX,EAAE,QAC5B,KAAK,KAAK,eAAe,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,YAAY,KAAK,IAAI,KAAK,KAAK,cAAc,KAAK,KAAK;;AAW9G,WAAK,KAAK,gBAAgB,KAAK,KAAK,eAAe,KAAK,KAAK,eAAe,KAAK,KAAK,AAGtF,eAAY,KAAK,KAAK,eAAe,KAAK,KAAK;AAA3C,UACA,IAAO,IAAQ,KAAK,QAAQ,AAChC,iBAAK,KAAK,QAAQ,KAAK,QAAQ,IAAO,KAAK,QAAQ,WAAW,KAAK,QAAQ,YAGvE,KAAK,QAAQ,aAChB,KAAK,QAAQ,MAAM,KAAK,aAAxB,kBAAqD,KAAK,KAAK,cAA/D,qBAA6F,KAAK,KAAK,QAAvG,SAEA,KAAK,QAAQ,MAAM,KAAK,aAAxB,kBAAqD,KAAK,KAAK,cAA/D,aAGD,KAAK,KAAK,iBAAiB,KAAK,KAAK,aACrC,KAAK,IAAI,KAAK;gDAOR,GAAK,GAAK;AAChB,AAAO,kBAAK,IAAI,KAAK,IAAI,GAAK,IAAM;;AAWpC,WAAK,KAAK,aAAa,GACvB,KAAK,KAAK,cAAc,KAAK,QAAQ,wBAAwB,QAAQ,OAAO;;AAI5E,WAAK;;6C,AA3KP,AACA,AACA,AACA,AAEqB,AAEpB,AAAY,AAAM,AAGjB,AAAK,AAEL,AACA,AAAK,AAAU,AAAO,AAAO,AAC5B,AAAW,AAAK,AAChB,AAAQ,AAAK,AACb,AAAY,AAAK,AAAc,AAC/B,AAAQ,AAAK,AAAW,AACxB,AAAa,AAAK,AAAe,AACjC,AAAW,AAAK,AAAa,AAC3B,AAEH,AAAK,AAAO,AACX,AAAa,AACb,AAAgB,AAChB,AAAc,AACd,AAAY,AACZ,AAAa,AACb,AAAQ,AAAK,AAAQ,AACrB,AAAW,AACX,AAAO,AACP,AAAa,AAGd,AAAK,AAAU,AAAS,AAAc,AACtC,AAAK,AAAQ,AAAa,AAAS,AAEnC,AAAK,AAAK,AACV,AAAK,AAAY,AAAU,AAE3B,AAAK,AAEL,AAAK,AACL,AAAK,AACL,AAAK,AAEL,AAED,AAEA,AAIQ,AACP,AAAK,AAAU,AAAK,AAAQ,AAAK,AACjC,AAAK,AAAW,AAAK,AAAS,AAAK,AACnC,AAED,AAIa,AACZ,AAAK,AAAG,AAAG,AAAK,AAAW,AAC3B,AAAK,AAAI,AAAK,AACd,AAAO,AAAiB,AAAU,AAAK,AACvC,AAED,AAIgB,AACf,AAAK,AAAI,AAAO,AAAK,AACrB,AAAK,AAAI,AAAK,AACd,AAAO,AAAoB,AAAU,AAAK,AAC1C,AAED,AAIS,AAER,AAAO,AAAO,AAAK,AAAQ,AAAO,AACjC,AAAU,AACV,AAAK,AACL,AAAM,AACN,AAAuB,AACvB,AAAe,AAGhB,AAAO,AAAO,AAAK,AAAQ,AAAU,AAAG,AAAO,AAC9C,AAAe,AACf,AAAY,AAGb,AAAM,AAAU,AAAQ,AAAK,AAAK,AAAQ,AAAQ,AAAS,AAC1D,AAAM,AAAM,AAAU,AACtB,AAAK,AAAQ,AAAU,AAAG,AAAa,AAAK,AAAS,AACrD,AAAK,AAAQ,AAAY,AACzB,AAED,AAAK,AAAQ,AAAU,AAAG,AAAY,AAAK,AAE3C,AAED,AAIU,AAAG,AAEZ,AAAI,AAAE,AAAS,AAAG,AACjB,AAAK,AAAK,AAAY,AACtB,AAAM,AACN,AAAK,AAAK,AAAY,AAAC,AACvB,AAED,AAAK,AAAK,AAAgB,AAAE,AAAS,AAAC,AACtC,AAAK,AAAK,AAAe,AAAK,AAAM,AAAK,AAAI,AAAK,AAAK,AAAY,AAAK,AAAI,AAAK,AAAK,AAAc,AAAK,AAAK,AAE9G,AAED,AAIU,AAET,AACA,AAAK,AAAK,AAAe,AAAC,AAAK,AAAK,AAAe,AAAK,AAAK,AAAe,AAAK,AAAK,AAEtF,AACA,AAAI,AAAQ,AAAK,AAAK,AAAe,AAAK,AAAK,AAC/C,AAAI,AAAO,AAAQ,AAAK,AAAQ,AAChC,AAAK,AAAK,AAAQ,AAAK,AAAO,AAAC,AAAM,AAAC,AAAK,AAAQ,AAAW,AAAK,AAAQ,AAE3E,AACA,AAAI,AAAK,AAAQ,AAAY,AAC5B,AAAK,AAAQ,AAAM,AAAK,AAA6B,AAAK,AAAK,AAA8B,AAAK,AAAK,AACvG,AAAM,AACN,AAAK,AAAQ,AAAM,AAAK,AAA6B,AAAK,AAAK,AAC/D,AAED,AAAK,AAAK,AAAiB,AAAK,AAAK,AACrC,AAAK,AAAI,AAAK,AACd,AAED,AAIO,AAAK,AAAK,AAAK,AACrB,AAAO,AAAK,AAAI,AAAK,AAAI,AAAK,AAAM,AACpC,AAED,AAEA,AAKW,AACV,AAAK,AAAK,AAAa,AACvB,AAAK,AAAK,AAAc,AAAK,AAAQ,AAAwB,AAAQ,AAAO,AAC5E,AAES,AACT,AAAK,AACL","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","// Generated by CoffeeScript 1.9.2\n(function() {\n var root;\n\n root = typeof exports !== \"undefined\" && exports !== null ? exports : this;\n\n root.Lethargy = (function() {\n function Lethargy(stability, sensitivity, tolerance, delay) {\n this.stability = stability != null ? Math.abs(stability) : 8;\n this.sensitivity = sensitivity != null ? 1 + Math.abs(sensitivity) : 100;\n this.tolerance = tolerance != null ? 1 + Math.abs(tolerance) : 1.1;\n this.delay = delay != null ? delay : 150;\n this.lastUpDeltas = (function() {\n var i, ref, results;\n results = [];\n for (i = 1, ref = this.stability * 2; 1 <= ref ? i <= ref : i >= ref; 1 <= ref ? i++ : i--) {\n results.push(null);\n }\n return results;\n }).call(this);\n this.lastDownDeltas = (function() {\n var i, ref, results;\n results = [];\n for (i = 1, ref = this.stability * 2; 1 <= ref ? i <= ref : i >= ref; 1 <= ref ? i++ : i--) {\n results.push(null);\n }\n return results;\n }).call(this);\n this.deltasTimestamp = (function() {\n var i, ref, results;\n results = [];\n for (i = 1, ref = this.stability * 2; 1 <= ref ? i <= ref : i >= ref; 1 <= ref ? i++ : i--) {\n results.push(null);\n }\n return results;\n }).call(this);\n }\n\n Lethargy.prototype.check = function(e) {\n var lastDelta;\n e = e.originalEvent || e;\n if (e.wheelDelta != null) {\n lastDelta = e.wheelDelta;\n } else if (e.deltaY != null) {\n lastDelta = e.deltaY * -40;\n } else if ((e.detail != null) || e.detail === 0) {\n lastDelta = e.detail * -40;\n }\n this.deltasTimestamp.push(Date.now());\n this.deltasTimestamp.shift();\n if (lastDelta > 0) {\n this.lastUpDeltas.push(lastDelta);\n this.lastUpDeltas.shift();\n return this.isInertia(1);\n } else {\n this.lastDownDeltas.push(lastDelta);\n this.lastDownDeltas.shift();\n return this.isInertia(-1);\n }\n return false;\n };\n\n Lethargy.prototype.isInertia = function(direction) {\n var lastDeltas, lastDeltasNew, lastDeltasOld, newAverage, newSum, oldAverage, oldSum;\n lastDeltas = direction === -1 ? this.lastDownDeltas : this.lastUpDeltas;\n if (lastDeltas[0] === null) {\n return direction;\n }\n if (this.deltasTimestamp[(this.stability * 2) - 2] + this.delay > Date.now() && lastDeltas[0] === lastDeltas[(this.stability * 2) - 1]) {\n return false;\n }\n lastDeltasOld = lastDeltas.slice(0, this.stability);\n lastDeltasNew = lastDeltas.slice(this.stability, this.stability * 2);\n oldSum = lastDeltasOld.reduce(function(t, s) {\n return t + s;\n });\n newSum = lastDeltasNew.reduce(function(t, s) {\n return t + s;\n });\n oldAverage = oldSum / lastDeltasOld.length;\n newAverage = newSum / lastDeltasNew.length;\n if (Math.abs(oldAverage) < Math.abs(newAverage * this.tolerance) && (this.sensitivity < Math.abs(newAverage))) {\n return direction;\n } else {\n return false;\n }\n };\n\n Lethargy.prototype.showLastUpDeltas = function() {\n return this.lastUpDeltas;\n };\n\n Lethargy.prototype.showLastDownDeltas = function() {\n return this.lastDownDeltas;\n };\n\n return Lethargy;\n\n })();\n\n}).call(this);\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// Generated by CoffeeScript 1.7.1\n(function() {\n var getNanoSeconds, hrtime, loadTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - loadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n loadTime = getNanoSeconds();\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n","// check document first so it doesn't error in node.js\nvar style = typeof document != 'undefined'\n ? document.createElement('p').style\n : {}\n\nvar prefixes = ['O', 'ms', 'Moz', 'Webkit']\nvar upper = /([A-Z])/g\nvar memo = {}\n\n/**\n * prefix `key`\n *\n * prefix('transform') // => WebkitTransform\n *\n * @param {String} key\n * @return {String}\n * @api public\n */\nfunction prefix(key){\n // Camel case\n key = key.replace(/-([a-z])/g, function(_, char){\n return char.toUpperCase()\n })\n\n // Without prefix\n if (style[key] !== undefined) return key\n\n // With prefix\n var Key = key.charAt(0).toUpperCase() + key.slice(1)\n var i = prefixes.length\n while (i--) {\n var name = prefixes[i] + Key\n if (style[name] !== undefined) return name\n }\n\n return key\n}\n\n/**\n * Memoized version of `prefix`\n *\n * @param {String} key\n * @return {String}\n * @api public\n */\nfunction prefixMemozied(key){\n return key in memo\n ? memo[key]\n : memo[key] = prefix(key)\n}\n\n/**\n * Create a dashed prefix\n *\n * @param {String} key\n * @return {String}\n * @api public\n */\nfunction prefixDashed(key){\n key = prefix(key)\n if (upper.test(key)) {\n key = '-' + key.replace(upper, '-$1')\n upper.lastIndex = 0\n }\n return key.toLowerCase()\n}\n\nmodule.exports = prefixMemozied\nmodule.exports.dash = prefixDashed\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function() {\n root.requestAnimationFrame = raf\n root.cancelAnimationFrame = caf\n}\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n","'use strict';\n\nmodule.exports = function(source) {\n return JSON.parse(JSON.stringify(source));\n};","'use strict';\n\nvar objectAssign = require('object-assign');\nvar Emitter = require('tiny-emitter');\nvar Lethargy = require('lethargy').Lethargy;\nvar support = require('./support');\nvar clone = require('./clone');\nvar bindAll = require('bindall-standalone');\nvar EVT_ID = 'virtualscroll';\n\nmodule.exports = VirtualScroll;\n\nvar keyCodes = {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n};\n\nfunction VirtualScroll(options) {\n bindAll(this, '_onWheel', '_onMouseWheel', '_onTouchStart', '_onTouchMove', '_onKeyDown');\n\n\tthis.el = window;\n if (options && options.el) {\n this.el = options.el;\n delete options.el;\n }\n this.options = objectAssign({\n mouseMultiplier: 1,\n touchMultiplier: 2,\n firefoxMultiplier: 15,\n keyStep: 120,\n preventTouch: false,\n unpreventTouchClass: 'vs-touchmove-allowed',\n limitInertia: false\n }, options);\n\n if (this.options.limitInertia) this._lethargy = new Lethargy();\n\n this._emitter = new Emitter();\n this._event = {\n y: 0,\n x: 0,\n deltaX: 0,\n deltaY: 0\n };\n\n this.touchStartX = null;\n this.touchStartY = null;\n this.bodyTouchAction = null;\n}\n\nVirtualScroll.prototype._notify = function(e) {\n var evt = this._event;\n evt.x += evt.deltaX;\n evt.y += evt.deltaY;\n\n this._emitter.emit(EVT_ID, {\n x: evt.x,\n y: evt.y,\n deltaX: evt.deltaX,\n deltaY: evt.deltaY,\n originalEvent: e\n });\n};\n\nVirtualScroll.prototype._onWheel = function(e) {\n var options = this.options;\n if (this._lethargy && this._lethargy.check(e) === false) return;\n\n var evt = this._event;\n\n // In Chrome and in Firefox (at least the new one)\n evt.deltaX = e.wheelDeltaX || e.deltaX * -1;\n evt.deltaY = e.wheelDeltaY || e.deltaY * -1;\n\n // for our purpose deltamode = 1 means user is on a wheel mouse, not touch pad\n // real meaning: https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent#Delta_modes\n if(support.isFirefox && e.deltaMode == 1) {\n evt.deltaX *= options.firefoxMultiplier;\n evt.deltaY *= options.firefoxMultiplier;\n }\n\n evt.deltaX *= options.mouseMultiplier;\n evt.deltaY *= options.mouseMultiplier;\n\n this._notify(e);\n};\n\nVirtualScroll.prototype._onMouseWheel = function(e) {\n if (this.options.limitInertia && this._lethargy.check(e) === false) return;\n\n var evt = this._event;\n\n // In Safari, IE and in Chrome if 'wheel' isn't defined\n evt.deltaX = (e.wheelDeltaX) ? e.wheelDeltaX : 0;\n evt.deltaY = (e.wheelDeltaY) ? e.wheelDeltaY : e.wheelDelta;\n\n this._notify(e);\n};\n\nVirtualScroll.prototype._onTouchStart = function(e) {\n var t = (e.targetTouches) ? e.targetTouches[0] : e;\n this.touchStartX = t.pageX;\n this.touchStartY = t.pageY;\n};\n\nVirtualScroll.prototype._onTouchMove = function(e) {\n var options = this.options;\n if(options.preventTouch\n && !e.target.classList.contains(options.unpreventTouchClass)) {\n e.preventDefault();\n }\n\n var evt = this._event;\n\n var t = (e.targetTouches) ? e.targetTouches[0] : e;\n\n evt.deltaX = (t.pageX - this.touchStartX) * options.touchMultiplier;\n evt.deltaY = (t.pageY - this.touchStartY) * options.touchMultiplier;\n\n this.touchStartX = t.pageX;\n this.touchStartY = t.pageY;\n\n this._notify(e);\n};\n\nVirtualScroll.prototype._onKeyDown = function(e) {\n var evt = this._event;\n evt.deltaX = evt.deltaY = 0;\n\n switch(e.keyCode) {\n case keyCodes.LEFT:\n case keyCodes.UP:\n evt.deltaY = this.options.keyStep;\n break;\n\n case keyCodes.RIGHT:\n case keyCodes.DOWN:\n evt.deltaY = - this.options.keyStep;\n break;\n\n default:\n return;\n }\n\n this._notify(e);\n};\n\nVirtualScroll.prototype._bind = function() {\n if(support.hasWheelEvent) this.el.addEventListener('wheel', this._onWheel);\n if(support.hasMouseWheelEvent) this.el.addEventListener('mousewheel', this._onMouseWheel);\n\n if(support.hasTouch) {\n this.el.addEventListener('touchstart', this._onTouchStart);\n this.el.addEventListener('touchmove', this._onTouchMove);\n }\n\n if(support.hasPointer && support.hasTouchWin) {\n this.bodyTouchAction = document.body.style.msTouchAction;\n document.body.style.msTouchAction = 'none';\n this.el.addEventListener('MSPointerDown', this._onTouchStart, true);\n this.el.addEventListener('MSPointerMove', this._onTouchMove, true);\n }\n\n if(support.hasKeyDown) document.addEventListener('keydown', this._onKeyDown);\n};\n\nVirtualScroll.prototype._unbind = function() {\n if(support.hasWheelEvent) this.el.removeEventListener('wheel', this._onWheel);\n if(support.hasMouseWheelEvent) this.el.removeEventListener('mousewheel', this._onMouseWheel);\n\n if(support.hasTouch) {\n this.el.removeEventListener('touchstart', this._onTouchStart);\n this.el.removeEventListener('touchmove', this._onTouchMove);\n }\n\n if(support.hasPointer && support.hasTouchWin) {\n document.body.style.msTouchAction = this.bodyTouchAction;\n this.el.removeEventListener('MSPointerDown', this._onTouchStart, true);\n this.el.removeEventListener('MSPointerMove', this._onTouchMove, true);\n }\n\n if(support.hasKeyDown) document.removeEventListener('keydown', this._onKeyDown);\n};\n\nVirtualScroll.prototype.on = function(cb, ctx) {\n this._emitter.on(EVT_ID, cb, ctx);\n\n var events = this._emitter.e;\n if (events && events[EVT_ID] && events[EVT_ID].length === 1) this._bind();\n};\n\nVirtualScroll.prototype.off = function(cb, ctx) {\n this._emitter.off(EVT_ID, cb, ctx);\n\n var events = this._emitter.e;\n if (!events[EVT_ID] || events[EVT_ID].length <= 0) this._unbind();\n};\n\nVirtualScroll.prototype.reset = function() {\n var evt = this._event;\n evt.x = 0;\n evt.y = 0;\n};\n\nVirtualScroll.prototype.destroy = function() {\n this._emitter.off();\n this._unbind();\n};\n","'use strict';\n\nmodule.exports = (function getSupport() {\n return {\n hasWheelEvent: 'onwheel' in document,\n hasMouseWheelEvent: 'onmousewheel' in document,\n hasTouch: 'ontouchstart' in document,\n hasTouchWin: navigator.msMaxTouchPoints && navigator.msMaxTouchPoints > 1,\n hasPointer: !!window.navigator.msPointerEnabled,\n hasKeyDown: 'onkeydown' in document,\n isFirefox: navigator.userAgent.indexOf('Firefox') > -1\n };\n})();","import { EventEmitter } from 'events';\nimport VirtualScroll from 'virtual-scroll';\nimport raf from 'raf';\nimport transform from 'prefix';\n\nexport default class HorizontalScroll extends EventEmitter {\n\n\tconstructor(opts) {\n\t\tsuper();\n\n\t\tthis._bind();\n\n\t\t// Set default options\n\t\tthis.options = Object.assign({\n\t\t\tcontainer: opts.container,\n\t\t\tblocks: opts.blocks,\n\t\t\tisAnimated: opts.isAnimated || false,\n\t\t\tspring: opts.spring || 0.1,\n\t\t\tskewReducer: opts.skewReducer || 20,\n\t\t\tskewLimit: opts.skewLimit || 30,\n\t\t}, opts);\n\n\t\tthis.vars = {\n\t\t\tscrollValue: 0,\n\t\t\toldScrollValue: 0,\n\t\t\tscrollTarget: 0,\n\t\t\tscrollLeft: 0,\n\t\t\tscrollRight: 0,\n\t\t\tspring: this.options.spring,\n\t\t\tdirection: 0,\n\t\t\tspeed: 0,\n\t\t\tspeedTarget: 0,\n\t\t};\n\n\t\tthis.wrapper = document.createElement('div');\n\t\tthis.wrapper.setAttribute('class', 'horizontal-scroll');\n\n\t\tthis.vs = new VirtualScroll();\n\t\tthis.transform = transform('transform');\n\n\t\tthis.raf = raf;\n\n\t\tthis._setUI();\n\t\tthis._addEvents();\n\t\tthis.onResize();\n\n\t}\n\n\t// PRIVATE\n\n\t/**\n\t * Biding methods\n\t *\n\t */\n\t_bind() {\n\t\tthis._update = this._update.bind(this);\n\t\tthis.onResize = this.onResize.bind(this);\n\t}\n\n\t/**\n\t * Add all events\n\t *\n\t */\n\t_addEvents() {\n\t\tthis.vs.on(this._onScroll, this);\n\t\tthis.raf(this._update);\n\t\twindow.addEventListener('resize', this.onResize);\n\t}\n\n\t/**\n\t * Remove all events\n\t *\n\t */\n\t_removeEvents() {\n\t\tthis.raf.cancel(this._update);\n\t\tthis.raf(this._update);\n\t\twindow.removeEventListener('resize', this.onResize);\n\t}\n\n\t/**\n\t * Set the UI\n\t *\n\t */\n\t_setUI() {\n\n\t\tObject.assign(this.wrapper.style ,{\n\t\t\tposition: 'absolute',\n\t\t\ttop: '0',\n\t\t\tleft: '0',\n\t\t\t'backface-visibility': 'hidden',\n\t\t\t'will-change': 'transform'\n\t\t});\n\n\t\tObject.assign(this.options.container[0].style ,{\n\t\t\t'white-space': 'nowrap',\n\t\t\t'position': 'relative',\n\t\t});\n\n\t\tArray.prototype.forEach.call(this.options.blocks, block => {\n\t\t\tblock.style.display = 'inline-block';\n\t\t\tthis.options.container[0].replaceChild(this.wrapper, block);\n\t\t\tthis.wrapper.appendChild(block);\n\t\t});\n\n\t\tthis.options.container[0].appendChild(this.wrapper);\n\n\t}\n\n\t/**\n\t * Trigger when user scroll\n\t *\n\t */\n\t_onScroll(e) {\n\n\t\tif (e.deltaY > 0) {\n\t\t\tthis.vars.direction = 1;\n\t\t} else {\n\t\t\tthis.vars.direction = -1;\n\t\t}\n\n\t\tthis.vars.scrollTarget += e.deltaY * -1;\n\t\tthis.vars.scrollTarget = Math.round(Math.max(this.vars.scrollLeft, Math.min(this.vars.scrollTarget, this.vars.scrollRight)));\n\n\t}\n\n\t/**\n\t * RAF\n\t *\n\t */\n\t_update() {\n\n\t\t// SCROLL VALUE\n\t\tthis.vars.scrollValue += (this.vars.scrollTarget - this.vars.scrollValue) * this.vars.spring;\n\n\t\t// DELTA\n\t\tlet delta = this.vars.scrollTarget - this.vars.scrollValue;\n\t\tlet skew = delta / this.options.skewReducer;\n\t\tthis.vars.speed = this._clamp(-skew, -this.options.skewLimit, this.options.skewLimit);\n\n\t\t// TRANSFORM\n\t\tif (this.options.isAnimated) {\n\t\t\tthis.wrapper.style[this.transform] = `translate3d(-${this.vars.scrollValue}px, 0 ,0) skewX(${this.vars.speed}deg)`;\n\t\t} else {\n\t\t\tthis.wrapper.style[this.transform] = `translate3d(-${this.vars.scrollValue}px, 0 ,0)`;\n\t\t}\n\n\t\tthis.vars.oldScrollValue = this.vars.scrollValue;\n\t\tthis.raf(this._update);\n\t}\n\n\t/**\n\t * CLAMP\n\t *\n\t */\n\t_clamp(num, min, max) {\n\t\treturn Math.min(Math.max(num, min), max);\n\t}\n\n\t// PUBLIC\n\n\t/**\n\t * Destroy variables and bind events\n\t *\n\t */\n\n\tonResize() {\n\t\tthis.vars.scrollLeft = 0;\n\t\tthis.vars.scrollRight = this.wrapper.getBoundingClientRect().width - window.innerWidth;\n\t}\n\n\tdestroy() {\n\t\tthis._removeEvents();\n\t}\n\n}\n"]} -------------------------------------------------------------------------------- /examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Horizontal Scroll 7 | 8 | 9 | 42 | 43 | 44 |

Horizontal scroll

45 |
46 | 47 |
48 |

Item 1

49 |
50 | 51 |
52 |

Item 2

53 |
54 | 55 |
56 |

Item 3

57 |
58 | 59 |
60 |

Item 4

61 |
62 | 63 |
64 |

Item 5

65 |
66 | 67 |
68 |

Item 6

69 |
70 | 71 |
72 |

Item 7

73 |
74 | 75 |
76 |

Item 8

77 |
78 | 79 |
80 | 81 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "horizontal-scroll", 3 | "version": "1.0.1", 4 | "author": "Fardeau Corentin ", 5 | "description": "Horizontal scroll with inertia", 6 | "main": "dist/index.js", 7 | "license": "MIT", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/corentinfardeau/horizontal-scroll" 11 | }, 12 | "bugs": { 13 | "url": "https://github.com/corentinfardeau/horizontal-scroll/issues" 14 | }, 15 | "keywords": [ 16 | "scroll", 17 | "horizontal-scroll", 18 | "inertia", 19 | "horizontal" 20 | ], 21 | "scripts": { 22 | "clean": "rm -rf dist", 23 | "watch": "npm run clean && parallelshell 'npm run watch:lint' 'npm run watch:js'", 24 | "watch:lint": "esw -w src", 25 | "watch:js": "mkdir -p dist && watchify src/index.js -vd -t browserify-shim -t [ babelify --presets [ es2015 ] ] -t brfs -s HorizontalScroll -o dist/index.js", 26 | "build": "npm run build:lint && npm run clean && npm run build:js && npm run build:uglify", 27 | "build:lint": "esw src", 28 | "build:js": "mkdir dist && browserify src/index.js -d -t browserify-shim -t [ babelify --presets [ es2015 ] ] -t brfs -t [ uglifyify -x .js ] -s HorizontalScroll | exorcist dist/index.js.map > dist/index.js", 29 | "build:uglify": "uglifyjs -cm --in-source-map dist/index.js.map --source-map dist/index.js.map --source-map-url index.js.map -o dist/index.js dist/index.js" 30 | }, 31 | "devDependencies": { 32 | "babel-preset-es2015": "6.18.0", 33 | "babelify": "7.3.0", 34 | "brfs": "1.4.3", 35 | "browserify": "13.1.1", 36 | "browserify-shim": "3.8.12", 37 | "eslint": "3.12.2", 38 | "eslint-watch": "2.1.14", 39 | "exorcist": "0.4.0", 40 | "parallelshell": "2.0.0", 41 | "tape": "4.6.3", 42 | "uglify": "0.1.5", 43 | "uglifyify": "3.0.4", 44 | "watchify": "3.8.0" 45 | }, 46 | "dependencies": { 47 | "prefix": "^1.0.0", 48 | "raf": "^3.3.0", 49 | "virtual-scroll": "^1.1.1" 50 | }, 51 | "browserify-shim": {}, 52 | "browserify": { 53 | "transform": [ 54 | [ 55 | "babelify", 56 | { 57 | "presets": [ 58 | "es2015" 59 | ] 60 | } 61 | ] 62 | ] 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from 'events'; 2 | import VirtualScroll from 'virtual-scroll'; 3 | import raf from 'raf'; 4 | import transform from 'prefix'; 5 | 6 | export default class HorizontalScroll extends EventEmitter { 7 | 8 | constructor(opts) { 9 | super(); 10 | 11 | this._bind(); 12 | 13 | // Set default options 14 | this.options = Object.assign({ 15 | container: opts.container, 16 | blocks: opts.blocks, 17 | isAnimated: opts.isAnimated || false, 18 | spring: opts.spring || 0.1, 19 | skewReducer: opts.skewReducer || 20, 20 | skewLimit: opts.skewLimit || 30, 21 | }, opts); 22 | 23 | this.vars = { 24 | scrollValue: 0, 25 | oldScrollValue: 0, 26 | scrollTarget: 0, 27 | scrollLeft: 0, 28 | scrollRight: 0, 29 | spring: this.options.spring, 30 | direction: 0, 31 | speed: 0, 32 | speedTarget: 0, 33 | }; 34 | 35 | this.wrapper = document.createElement('div'); 36 | this.wrapper.setAttribute('class', 'horizontal-scroll'); 37 | 38 | this.vs = new VirtualScroll(); 39 | this.transform = transform('transform'); 40 | 41 | this.raf = raf; 42 | 43 | this._setUI(); 44 | this._addEvents(); 45 | this.onResize(); 46 | 47 | } 48 | 49 | // PRIVATE 50 | 51 | /** 52 | * Biding methods 53 | * 54 | */ 55 | _bind() { 56 | this._update = this._update.bind(this); 57 | this.onResize = this.onResize.bind(this); 58 | } 59 | 60 | /** 61 | * Add all events 62 | * 63 | */ 64 | _addEvents() { 65 | this.vs.on(this._onScroll, this); 66 | this.raf(this._update); 67 | window.addEventListener('resize', this.onResize); 68 | } 69 | 70 | /** 71 | * Remove all events 72 | * 73 | */ 74 | _removeEvents() { 75 | this.raf.cancel(this._update); 76 | this.raf(this._update); 77 | window.removeEventListener('resize', this.onResize); 78 | } 79 | 80 | /** 81 | * Set the UI 82 | * 83 | */ 84 | _setUI() { 85 | 86 | Object.assign(this.wrapper.style ,{ 87 | position: 'absolute', 88 | top: '0', 89 | left: '0', 90 | 'backface-visibility': 'hidden', 91 | 'will-change': 'transform' 92 | }); 93 | 94 | Object.assign(this.options.container[0].style ,{ 95 | 'white-space': 'nowrap', 96 | 'position': 'relative', 97 | }); 98 | 99 | Array.prototype.forEach.call(this.options.blocks, block => { 100 | block.style.display = 'inline-block'; 101 | this.options.container[0].replaceChild(this.wrapper, block); 102 | this.wrapper.appendChild(block); 103 | }); 104 | 105 | this.options.container[0].appendChild(this.wrapper); 106 | 107 | } 108 | 109 | /** 110 | * Trigger when user scroll 111 | * 112 | */ 113 | _onScroll(e) { 114 | 115 | if (e.deltaY > 0) { 116 | this.vars.direction = 1; 117 | } else { 118 | this.vars.direction = -1; 119 | } 120 | 121 | this.vars.scrollTarget += e.deltaY * -1; 122 | this.vars.scrollTarget = Math.round(Math.max(this.vars.scrollLeft, Math.min(this.vars.scrollTarget, this.vars.scrollRight))); 123 | 124 | } 125 | 126 | /** 127 | * RAF 128 | * 129 | */ 130 | _update() { 131 | 132 | // SCROLL VALUE 133 | this.vars.scrollValue += (this.vars.scrollTarget - this.vars.scrollValue) * this.vars.spring; 134 | 135 | // DELTA 136 | let delta = this.vars.scrollTarget - this.vars.scrollValue; 137 | let skew = delta / this.options.skewReducer; 138 | this.vars.speed = this._clamp(-skew, -this.options.skewLimit, this.options.skewLimit); 139 | 140 | // TRANSFORM 141 | if (this.options.isAnimated) { 142 | this.wrapper.style[this.transform] = `translate3d(-${this.vars.scrollValue}px, 0 ,0) skewX(${this.vars.speed}deg)`; 143 | } else { 144 | this.wrapper.style[this.transform] = `translate3d(-${this.vars.scrollValue}px, 0 ,0)`; 145 | } 146 | 147 | this.vars.oldScrollValue = this.vars.scrollValue; 148 | this.raf(this._update); 149 | } 150 | 151 | /** 152 | * CLAMP 153 | * 154 | */ 155 | _clamp(num, min, max) { 156 | return Math.min(Math.max(num, min), max); 157 | } 158 | 159 | // PUBLIC 160 | 161 | /** 162 | * Destroy variables and bind events 163 | * 164 | */ 165 | 166 | onResize() { 167 | this.vars.scrollLeft = 0; 168 | this.vars.scrollRight = this.wrapper.getBoundingClientRect().width - window.innerWidth; 169 | } 170 | 171 | destroy() { 172 | this._removeEvents(); 173 | } 174 | 175 | } 176 | -------------------------------------------------------------------------------- /src/range.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * Return a new value linearly interpolate between a new min and max, 5 | * depending on his old range 6 | * @param {Number} val The value we want to interpolate 7 | * @param {Number} oldMin The old lowest value 8 | * @param {Number} oldMax The old higher value 9 | * @param {Number} newMin The new lowest value 10 | * @param {Number} newMax The new higher value 11 | * @return {Number} The new interpolated value 12 | */ 13 | export default function changeRange(val, oldMin, oldMax, newMin, newMax) { 14 | return (val - oldMin) * (newMax - newMin) / (oldMax - oldMin) + newMin; 15 | } 16 | --------------------------------------------------------------------------------