From 680cad82e938512fdd2820ee9de145849a642fab Mon Sep 17 00:00:00 2001
From: TANG <40519806@qq.com>
Date: Sat, 11 Apr 2020 21:31:30 +0800
Subject: [PATCH] Update docs
---
docs/css/{app.e6222fc2.css => app.ad98a2e0.css} | 2 +-
docs/index.html | 2 +-
docs/js/app.b95852df.js | 2 ++
docs/js/app.b95852df.js.map | 1 +
docs/js/app.fd55a986.js | 2 --
docs/js/app.fd55a986.js.map | 1 -
example/src/views/Index/Main.vue | 2 +-
7 files changed, 6 insertions(+), 6 deletions(-)
rename docs/css/{app.e6222fc2.css => app.ad98a2e0.css} (95%)
create mode 100644 docs/js/app.b95852df.js
create mode 100644 docs/js/app.b95852df.js.map
delete mode 100644 docs/js/app.fd55a986.js
delete mode 100644 docs/js/app.fd55a986.js.map
diff --git a/docs/css/app.e6222fc2.css b/docs/css/app.ad98a2e0.css
similarity index 95%
rename from docs/css/app.e6222fc2.css
rename to docs/css/app.ad98a2e0.css
index 5885627..667f77d 100644
--- a/docs/css/app.e6222fc2.css
+++ b/docs/css/app.ad98a2e0.css
@@ -1 +1 @@
-body{font-size:18px}#app{margin:0 auto;padding:0 2em;width:776px}@media (max-width:640px){#app{padding:3px;width:100%}}#nav{padding:1em 0}@media (max-width:640px){#nav{padding:0}}#nav a{margin-right:1.5em;margin-bottom:.5em;display:inline-block}@media (max-width:640px){#nav a{margin-bottom:0;margin-right:1em}}#nav .router-link-exact-active,#nav .router-link-exact-active:hover{color:inherit;cursor:default;border-bottom:1px solid;border-color:#606c76}.example-content{margin-top:1em;background-color:#fff}code{background-color:pink!important}.name[data-v-4ac967ef]{margin:1em 0}.head[data-v-4ac967ef]{margin-bottom:2em}.title[data-v-4ac967ef]{margin:1em 0}.introduction[data-v-0c507b69]{font-size:16px;padding:.5em 1em;border-radius:3px;background-color:#f8f8ff}@media (max-width:640px){.introduction[data-v-0c507b69]{display:none}}pre[data-v-99fd125a]{border:none;padding:1em;font-size:14px;border-radius:3px;font-family:Consolas,Monaco,Andale Mono,Lucida Console,monospace}.github-corner[data-v-821512e4]:hover,.octo-arm[data-v-821512e4]{-webkit-animation:octocat-wave-data-v-821512e4 .56s ease-in-out;animation:octocat-wave-data-v-821512e4 .56s ease-in-out}@-webkit-keyframes octocat-wave-data-v-821512e4{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@keyframes octocat-wave-data-v-821512e4{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm[data-v-821512e4]{-webkit-animation:none;animation:none}.github-corner .octo-arm[data-v-821512e4]{-webkit-animation:octocat-wave-data-v-821512e4 .56s ease-in-out;animation:octocat-wave-data-v-821512e4 .56s ease-in-out}}.tab[data-v-13711752]{width:100%;display:flex;margin-bottom:1em;position:relative}@media (max-width:640px){.tab[data-v-13711752]{display:none}}.tab .tab-item[data-v-13711752]{font-size:14px;font-weight:400;width:85px;margin-right:.5em;height:35px;display:flex;align-items:center;justify-content:center;position:relative;top:1px;cursor:pointer;opacity:.3;background-size:20px 20px;background-repeat:no-repeat;background-position:0}.tab .tab-item.active[data-v-13711752]{opacity:1}.tab .tab-item.view[data-v-13711752]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cdefs%3E%3Cstyle/%3E%3C/defs%3E%3Cpath d='M512 251.853c192.768 0 358.707 113.1 436.378 276.275H1024c-82.022-202.394-280.218-345.293-512-345.293S82.022 325.735 0 528.128h75.674C153.344 364.954 319.284 251.853 512 251.853zm0 552.55c-192.717 0-358.656-113.05-436.326-276.275H0c82.022 202.445 280.166 345.344 512 345.344s430.029-142.9 512-345.344h-75.674C870.707 691.354 704.768 804.403 512 804.403zM327.834 528.128a184.115 184.115 0 10368.281.051 184.115 184.115 0 00-368.281-.051zm299.315 0a115.2 115.2 0 11-230.298 0 115.2 115.2 0 01230.298 0zm0 0'/%3E%3C/svg%3E")}.tab .tab-item.code[data-v-13711752]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cdefs%3E%3Cstyle/%3E%3C/defs%3E%3Cpath d='M549.973 128a42.453 42.453 0 00-42.154 37.76l-75.904 683.136a42.325 42.325 0 1084.266 9.387l75.904-683.179A42.325 42.325 0 00550.016 128zM243.541 286.165a42.539 42.539 0 00-30.208 12.502L30.165 481.835a42.624 42.624 0 000 60.33l183.168 183.168a42.667 42.667 0 0060.331-60.33L120.661 512l153.003-153.003a42.624 42.624 0 00-30.165-72.832zm537.003 0a42.667 42.667 0 00-30.165 72.832L903.339 512 750.336 665.003a42.667 42.667 0 0060.33 60.33l183.169-183.168a42.624 42.624 0 000-60.33L810.667 298.667a42.539 42.539 0 00-30.166-12.502z'/%3E%3C/svg%3E")}.tab .complete-code-url[data-v-13711752]{position:absolute;right:0;top:50%;transform:translateY(-50%);font-size:12px}
\ No newline at end of file
+body{font-size:18px}#app{margin:0 auto;padding:0 2em;width:776px}@media (max-width:640px){#app{padding:3px;width:100%}}#nav{padding:1em 0}@media (max-width:640px){#nav{padding:0}}#nav a{margin-right:1.5em;margin-bottom:.5em;display:inline-block}@media (max-width:640px){#nav a{margin-bottom:0;margin-right:1em}}#nav .router-link-exact-active,#nav .router-link-exact-active:hover{color:inherit;cursor:default;border-bottom:1px solid;border-color:#606c76}.example-content{margin-top:1em;background-color:#fff}code{background-color:pink!important}.name[data-v-32c8ab71]{margin:1em 0}.head[data-v-32c8ab71]{margin-bottom:2em}.title[data-v-32c8ab71]{margin:1em 0}.introduction[data-v-0c507b69]{font-size:16px;padding:.5em 1em;border-radius:3px;background-color:#f8f8ff}@media (max-width:640px){.introduction[data-v-0c507b69]{display:none}}pre[data-v-99fd125a]{border:none;padding:1em;font-size:14px;border-radius:3px;font-family:Consolas,Monaco,Andale Mono,Lucida Console,monospace}.github-corner[data-v-821512e4]:hover,.octo-arm[data-v-821512e4]{-webkit-animation:octocat-wave-data-v-821512e4 .56s ease-in-out;animation:octocat-wave-data-v-821512e4 .56s ease-in-out}@-webkit-keyframes octocat-wave-data-v-821512e4{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@keyframes octocat-wave-data-v-821512e4{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm[data-v-821512e4]{-webkit-animation:none;animation:none}.github-corner .octo-arm[data-v-821512e4]{-webkit-animation:octocat-wave-data-v-821512e4 .56s ease-in-out;animation:octocat-wave-data-v-821512e4 .56s ease-in-out}}.tab[data-v-13711752]{width:100%;display:flex;margin-bottom:1em;position:relative}@media (max-width:640px){.tab[data-v-13711752]{display:none}}.tab .tab-item[data-v-13711752]{font-size:14px;font-weight:400;width:85px;margin-right:.5em;height:35px;display:flex;align-items:center;justify-content:center;position:relative;top:1px;cursor:pointer;opacity:.3;background-size:20px 20px;background-repeat:no-repeat;background-position:0}.tab .tab-item.active[data-v-13711752]{opacity:1}.tab .tab-item.view[data-v-13711752]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cdefs%3E%3Cstyle/%3E%3C/defs%3E%3Cpath d='M512 251.853c192.768 0 358.707 113.1 436.378 276.275H1024c-82.022-202.394-280.218-345.293-512-345.293S82.022 325.735 0 528.128h75.674C153.344 364.954 319.284 251.853 512 251.853zm0 552.55c-192.717 0-358.656-113.05-436.326-276.275H0c82.022 202.445 280.166 345.344 512 345.344s430.029-142.9 512-345.344h-75.674C870.707 691.354 704.768 804.403 512 804.403zM327.834 528.128a184.115 184.115 0 10368.281.051 184.115 184.115 0 00-368.281-.051zm299.315 0a115.2 115.2 0 11-230.298 0 115.2 115.2 0 01230.298 0zm0 0'/%3E%3C/svg%3E")}.tab .tab-item.code[data-v-13711752]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg class='icon' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cdefs%3E%3Cstyle/%3E%3C/defs%3E%3Cpath d='M549.973 128a42.453 42.453 0 00-42.154 37.76l-75.904 683.136a42.325 42.325 0 1084.266 9.387l75.904-683.179A42.325 42.325 0 00550.016 128zM243.541 286.165a42.539 42.539 0 00-30.208 12.502L30.165 481.835a42.624 42.624 0 000 60.33l183.168 183.168a42.667 42.667 0 0060.331-60.33L120.661 512l153.003-153.003a42.624 42.624 0 00-30.165-72.832zm537.003 0a42.667 42.667 0 00-30.165 72.832L903.339 512 750.336 665.003a42.667 42.667 0 0060.33 60.33l183.169-183.168a42.624 42.624 0 000-60.33L810.667 298.667a42.539 42.539 0 00-30.166-12.502z'/%3E%3C/svg%3E")}.tab .complete-code-url[data-v-13711752]{position:absolute;right:0;top:50%;transform:translateY(-50%);font-size:12px}
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index 38109d0..0807b4e 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1 +1 @@
-
vue-virtual-scroll-list
\ No newline at end of file
+vue-virtual-scroll-list
\ No newline at end of file
diff --git a/docs/js/app.b95852df.js b/docs/js/app.b95852df.js
new file mode 100644
index 0000000..de97d89
--- /dev/null
+++ b/docs/js/app.b95852df.js
@@ -0,0 +1,2 @@
+(function(e){function t(t){for(var n,a,o=t[0],l=t[1],c=t[2],u=0,h=[];uthis.range.start)){var t=Math.max(e-this.param.buffer,0);this.checkRange(t,this.getEndByStart(t))}}},{key:"handleBehind",value:function(){var e=this.getScrollOvers();ee&&(a=i-1)}return t>0?--t:0}},{key:"getIndexOffset",value:function(e){if(!e)return 0;for(var t=0,i=0,n=0;n<=e;n++)i=this.sizes.get(this.param.uniqueIds[n]),t+=i||this.getEstimateSize();return this.lastCalcIndex=Math.max(this.lastCalcIndex,e-1),this.lastCalcIndex=Math.min(this.lastCalcIndex,this.getLastIndex()),t}},{key:"isFixedType",value:function(){return this.calcType===x.FIXED}},{key:"getLastIndex",value:function(){return this.param.uniqueIds.length-1}},{key:"checkRange",value:function(e,t){var i=this.param.keeps,n=this.param.uniqueIds.length;n<=i?(e=0,t=this.getLastIndex()):t-e=o?this.$emit("tobottom",t,n):this.$emit("scroll",t,n)},getRenderSlots:function(e){for(var t=[],i=this.disabled?0:this.range.start,n=this.disabled?this.dataSources.length-1:this.range.end,a=i;a<=n;a++){var s=this.dataSources[a];s?t.push(e(w,{class:this.itemClass,props:{tag:this.itemTag,event:F.ITEM,horizontal:this.isHorizontal,uniqueKey:s[this.dataKey],source:s,component:this.dataComponent}})):console.warn("[".concat(N,"]: cannot get the index ").concat(a," from data-sources."))}return t}},render:function(e){var t=this.$slots,i=t.header,n=t.footer,a=this.isHorizontal?"0px ".concat(this.range.padBehind,"px 0px ").concat(this.range.padFront,"px"):"".concat(this.range.padFront,"px 0px ").concat(this.range.padBehind,"px");return e(this.rootTag,{ref:"root",on:{"&scroll":this.onScroll}},[i?e(R,{class:this.headerClass,props:{tag:this.headerTag,event:F.SLOT,uniqueKey:D.HEADER}},i):null,e(this.wrapTag,{class:this.wrapClass,attrs:{role:"group"},style:{padding:a}},this.getRenderSlots(e)),n?e(R,{class:this.footerClass,props:{tag:this.footerTag,event:F.SLOT,uniqueKey:D.FOOTER}},n):null])}}),M=$,P=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"introduction",domProps:{innerHTML:e._s(e.description)}})},j=[],B={name:"introduction",props:{description:{type:String}}},H=B,L=(i("de3a"),Object(r["a"])(H,P,j,!1,null,"0c507b69",null)),q=L.exports,V=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.code?i("pre",{class:e.type,domProps:{innerHTML:e._s(e.encode(e.code))}}):e._e()},A=[],K=(i("ac1f"),i("5319"),{name:"code-high-light",props:{type:{type:String,required:!0},code:{type:String,required:!0}},mounted:function(){"undefined"!==typeof window.hljs&&this.$el.textContent&&window.hljs.highlightBlock(this.$el)},methods:{encode:function(e){return"html"===this.type&&(e=e.replace(//g,">")),e=e.replace(/\s/,""),e}}}),U=K,W=(i("595a"),Object(r["a"])(U,V,A,!1,null,"99fd125a",null)),X=W.exports,Y=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isMobile?e._e():i("a",{staticClass:"github-corner",attrs:{href:e.url,"aria-label":"View source on GitHub"}},[i("svg",{staticStyle:{fill:"#9b4dca",color:"#fff",position:"absolute",top:"0",border:"0",right:"0","z-index":"1000"},attrs:{width:e.size,height:e.size,viewBox:"0 0 250 250","aria-hidden":"true"}},[i("path",{attrs:{d:"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"}}),i("path",{staticClass:"octo-arm",staticStyle:{"transform-origin":"130px 106px"},attrs:{d:"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2",fill:"currentColor"}}),i("path",{staticClass:"octo-body",attrs:{d:"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z",fill:"currentColor"}})])])},J=[],Z=i("835c"),G=i("3f05"),Q={name:"github-corner",data:function(){return{url:"",size:80,isMobile:Z["a"]}},mounted:function(){this.url=Object(G["a"])()}},ee=Q,te=(i("3f57"),Object(r["a"])(ee,Y,J,!1,null,"821512e4",null)),ie=te.exports,ne=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"tab"},[i("div",{staticClass:"tab-item view",class:{active:e.isView},on:{click:e.eventClickView}},[e._v("VIEW")]),i("div",{staticClass:"tab-item code",class:{active:!e.isView},on:{click:e.eventClickCode}},[e._v("CODE")]),i("a",{directives:[{name:"show",rawName:"v-show",value:!e.isView,expression:"!isView"}],staticClass:"complete-code-url",attrs:{target:"_blank",href:e.completeCodeUrl}},[e._v("COMPLETE CODE")])])},ae=[],se=i("b95e"),re={name:"tab",data:function(){return{completeCodeUrl:"",active:se["a"]}},computed:{isView:function(){return this.active===se["b"].VIEW}},mounted:function(){this.completeCodeUrl=Object(G["a"])()},methods:{eventClickView:function(){this.active=se["b"].VIEW,this.emitEvent()},eventClickCode:function(){this.active=se["b"].CODE,this.emitEvent()},emitEvent:function(){this.$emit("tab-change",this.active)}}},oe=re,le=(i("2345"),Object(r["a"])(oe,ne,ae,!1,null,"13711752",null)),ce=le.exports;n["a"].component("virtual-list",M),n["a"].component(q.name,q),n["a"].component(X.name,X),n["a"].component(ie.name,ie),n["a"].component(ce.name,ce),n["a"].config.devtools=!1,n["a"].config.productionTip=!1,new n["a"]({router:z,render:function(e){return e(c)}}).$mount("#app")},"595a":function(e,t,i){"use strict";var n=i("a5ff"),a=i.n(n);a.a},"5ce3":function(e,t,i){},"67ef":function(e,t,i){},"7c55":function(e,t,i){"use strict";var n=i("2395"),a=i.n(n);a.a},"835c":function(e,t,i){"use strict";i.d(t,"a",(function(){return r}));i("ac1f"),i("466d");var n=navigator.userAgent,a=!!n.match(/Android/i),s=!!n.match(/iPhone|iPad|iPod/i),r=a||s},a5ff:function(e,t,i){},b95e:function(e,t,i){"use strict";i.d(t,"c",(function(){return n})),i.d(t,"b",(function(){return a})),i.d(t,"a",(function(){return s}));var n=1e4,a={VIEW:1,CODE:2},s=a.VIEW},caf6:function(e,t,i){},de3a:function(e,t,i){"use strict";var n=i("2f31"),a=i.n(n);a.a}});
+//# sourceMappingURL=app.b95852df.js.map
\ No newline at end of file
diff --git a/docs/js/app.b95852df.js.map b/docs/js/app.b95852df.js.map
new file mode 100644
index 0000000..cbe6ece
--- /dev/null
+++ b/docs/js/app.b95852df.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Tab.vue?8914","webpack:///./src/views/index/Main.vue?13fd","webpack:///./src/common/get-code-url.js","webpack:///./src/components/Corner.vue?baf6","webpack:///./src/App.vue?ced9","webpack:///./src/App.vue?bff9","webpack:///./src/views/index/Main.vue?abab","webpack:///src/views/index/Main.vue","webpack:///./src/views/index/Main.vue?9578","webpack:///./src/views/index/Main.vue","webpack:///./src/router/index.js","webpack:///../src/virtual.js","webpack:///../src/props.js","webpack:///../src/item.js","webpack:///../src/index.js","webpack:///./src/components/Introduction.vue?bbc7","webpack:///src/components/Introduction.vue","webpack:///./src/components/Introduction.vue?8836","webpack:///./src/components/Introduction.vue","webpack:///./src/components/CodeHighLight.vue?6132","webpack:///src/components/CodeHighLight.vue","webpack:///./src/components/CodeHighLight.vue?c9ca","webpack:///./src/components/CodeHighLight.vue","webpack:///./src/components/Corner.vue?a6db","webpack:///src/components/Corner.vue","webpack:///./src/components/Corner.vue?80c1","webpack:///./src/components/Corner.vue","webpack:///./src/components/Tab.vue?70cf","webpack:///src/components/Tab.vue","webpack:///./src/components/Tab.vue?1581","webpack:///./src/components/Tab.vue","webpack:///./src/main.js","webpack:///./src/components/CodeHighLight.vue?0b70","webpack:///./src/App.vue?a173","webpack:///./src/common/ua.js","webpack:///./src/common/const.js","webpack:///./src/components/Introduction.vue?f996"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","hashValue","location","hash","substr","_vm","this","_h","$createElement","_c","_self","attrs","_v","staticRenderFns","component","staticClass","_m","Vue","use","VueRouter","routes","path","Index","router","DIRECTION_TYPE","FRONT","BEHIND","CALC_TYPE","INIT","FIXED","DYNAMIC","LEADING_BUFFER","Virtual","param","updateHook","init","sizes","Map","firstRangeTotalSize","firstRangeAverageSize","lastCalcIndex","fixedSizeValue","calcType","offset","direction","range","disabled","checkRange","keeps","start","end","padFront","padBehind","getIndexOffset","id","size","set","Math","round","max","updateRange","getEndByStart","handleDataSourcesChange","handleFront","handleBehind","overs","getScrollOvers","buffer","slotHeaderSize","isFixedType","floor","low","middle","middleOffset","high","uniqueIds","givenIndex","indexSize","index","getEstimateSize","min","getLastIndex","total","getPadFront","getPadBehind","getRange","theoryEnd","truelyEnd","lastIndex","VirtualProps","Number","require","dataKey","String","dataSources","Array","dataComponent","rootTag","default","wrapTag","wrapClass","upperThreshold","lowerThreshold","itemTag","itemClass","headerTag","headerClass","footerTag","footerClass","Boolean","ItemProps","horizontal","source","uniqueKey","SlotProps","Wrapper","created","hasInitial","shapeKey","mounted","dispatchSizeChange","ResizeObserver","resizeObserver","observe","$el","beforeDestroy","disconnect","methods","getCurrentSize","$parent","$emit","Item","mixins","props","render","h","role","Slot","$slots","EVENT_TYPE","ITEM","SLOT","SLOT_TYPE","HEADER","FOOTER","NAME","VirtualList","watch","newValue","oldValue","virtual","updateParam","getUniqueIdFromDataSources","isHorizontal","directionKey","slotFooterSize","onRangeChanged","$on","onItemResized","header","footer","onSlotResized","destroy","setScrollOffset","getOffset","saveSize","hasInit","handleSlotSizeChange","onScroll","evt","root","$refs","handleScroll","emitEvent","map","dataSource","isLower","isUpper","offsetShape","scrollShape","getRenderSlots","slots","class","warn","padding","ref","on","style","domProps","_s","description","encode","_e","required","hljs","textContent","highlightBlock","replace","isMobile","url","staticStyle","active","isView","eventClickView","eventClickCode","directives","rawName","expression","completeCodeUrl","computed","Introduction","CodeHighLight","Corner","Tab","config","devtools","productionTip","App","$mount","ua","navigator","userAgent","Android","match","iOS","TOTAL_COUNT","TAB_TYPE","VIEW","CODE","DEFAULT_TAB"],"mappings":"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","file":"js/app.b95852df.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\":\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\",\"dynamic-size\":\"dynamic-size\",\"fixed-size\":\"fixed-size\",\"horizontal\":\"horizontal\",\"infinite-loading\":\"infinite-loading\",\"keep-state\":\"keep-state\"}[chunkId]||chunkId) + \".\" + {\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\":\"3b940789\",\"dynamic-size\":\"af2b38a2\",\"fixed-size\":\"856b63cd\",\"horizontal\":\"a2686d86\",\"infinite-loading\":\"7ebcd00d\",\"keep-state\":\"587170ed\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"dynamic-size\":1,\"fixed-size\":1,\"horizontal\":1,\"infinite-loading\":1,\"keep-state\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\":\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\",\"dynamic-size\":\"dynamic-size\",\"fixed-size\":\"fixed-size\",\"horizontal\":\"horizontal\",\"infinite-loading\":\"infinite-loading\",\"keep-state\":\"keep-state\"}[chunkId]||chunkId) + \".\" + {\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\":\"31d6cfe0\",\"dynamic-size\":\"05987921\",\"fixed-size\":\"50cd9045\",\"horizontal\":\"5a6cefd6\",\"infinite-loading\":\"e3344d42\",\"keep-state\":\"367cb4ef\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=style&index=0&id=13711752&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=style&index=0&id=13711752&lang=less&scoped=true&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=style&index=0&id=32c8ab71&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=style&index=0&id=32c8ab71&lang=less&scoped=true&\"","export default () => {\n const hashValue = (location.hash || '').substr(2)\n if (hashValue) {\n return `https://github.com/tangbc/vue-virtual-scroll-list/tree/master/example/views/${hashValue}/Main.vue`\n } else {\n return `https://github.com/tangbc/vue-virtual-scroll-list`\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Corner.vue?vue&type=style&index=0&id=821512e4&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Corner.vue?vue&type=style&index=0&id=821512e4&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('div',{attrs:{\"id\":\"nav\"}},[_c('router-link',{attrs:{\"to\":\"/\"}},[_vm._v(\"home\")]),_c('router-link',{attrs:{\"to\":\"/fixed-size\"}},[_vm._v(\"fixed size\")]),_c('router-link',{attrs:{\"to\":\"/dynamic-size\"}},[_vm._v(\"dynamic size\")]),_c('router-link',{attrs:{\"to\":\"/horizontal\"}},[_vm._v(\"horizontal\")]),_c('router-link',{attrs:{\"to\":\"/infinite-loading\"}},[_vm._v(\"infinite loading\")]),_c('router-link',{attrs:{\"to\":\"/keep-state\"}},[_vm._v(\"keep state\")])],1),_c('router-view')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=55963a8a&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=less&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"index\"},[_c('github-corner'),_c('h2',{staticClass:\"name\"},[_vm._v(\"vue-virtual-scroll-list\")]),_vm._m(0),_c('h3',{staticClass:\"title\"},[_vm._v(\"What's news in v2.0\")]),_vm._m(1),_c('h3',{staticClass:\"title\"},[_vm._v(\"Todos\")]),_vm._m(2)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"head\"},[_c('img',{attrs:{\"src\":\"https://nodei.co/npm/vue-virtual-scroll-list.png?downloads=true&downloadRank=true&stars=true\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_c('li',[_vm._v(\"Support header slot, footer slot.\")]),_c('li',[_vm._v(\"Code structure is more reasonable and good maintainability.\")]),_c('li',[_vm._v(\"Abandoned v-for mode and variable mode, all condition unify into one mode.\")]),_c('li',[_vm._v(\"Don't have to care about each item size, in sometimes it's difficult to know that.\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_c('li',[_vm._v(\"Improve calculate offset efficient.\")]),_c('li',[_vm._v(\"Support page scroll, table layout, unit test.\")]),_c('li',[_vm._v(\"......\")])])}]\n\nexport { render, staticRenderFns }","\n \n
\n\n
vue-virtual-scroll-list \n\n
\n
\n
\n\n
What's news in v2.0 \n
\n Support header slot, footer slot. \n Code structure is more reasonable and good maintainability. \n Abandoned v-for mode and variable mode, all condition unify into one mode. \n Don't have to care about each item size, in sometimes it's difficult to know that. \n \n\n
Todos \n
\n Improve calculate offset efficient. \n Support page scroll, table layout, unit test. \n ...... \n \n
\n \n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Main.vue?vue&type=template&id=32c8ab71&scoped=true&\"\nimport script from \"./Main.vue?vue&type=script&lang=js&\"\nexport * from \"./Main.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Main.vue?vue&type=style&index=0&id=32c8ab71&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"32c8ab71\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Index from '../views/index/Main.vue'\n\nVue.use(VueRouter)\n\n const routes = [\n {\n path: '/',\n name: 'Index',\n component: Index\n },\n {\n path: '/fixed-size',\n name: 'fixed-size',\n component: () => import(/* webpackChunkName: \"fixed-size\" */ '../views/fixed-size/Main.vue')\n },\n {\n path: '/dynamic-size',\n name: 'dynamic-size',\n component: () => import(/* webpackChunkName: \"dynamic-size\" */ '../views/dynamic-size/Main.vue')\n },\n {\n path: '/horizontal',\n name: 'horizontal',\n component: () => import(/* webpackChunkName: \"horizontal\" */ '../views/horizontal/Main.vue')\n },\n {\n path: '/infinite-loading',\n name: 'infinite-loading',\n component: () => import(/* webpackChunkName: \"infinite-loading\" */ '../views/infinite-loading/Main.vue')\n },\n {\n path: '/keep-state',\n name: 'keep-state',\n component: () => import(/* webpackChunkName: \"keep-state\" */ '../views/keep-state/Main.vue')\n }\n]\n\nconst router = new VueRouter({\n routes\n})\n\nexport default router\n","/**\n * virtual list core calculating center.\n */\n\nconst DIRECTION_TYPE = {\n FRONT: 'FRONT', // scroll up or left.\n BEHIND: 'BEHIND' // scroll down or right.\n}\nconst CALC_TYPE = {\n INIT: 'INIT',\n FIXED: 'FIXED',\n DYNAMIC: 'DYNAMIC'\n}\nconst LEADING_BUFFER = 1\n\nexport default class Virtual {\n constructor (param, updateHook) {\n this.init(param, updateHook)\n }\n\n init (param, updateHook) {\n // param data.\n this.param = param\n this.updateHook = updateHook\n\n // size data.\n this.sizes = new Map()\n this.firstRangeTotalSize = 0\n this.firstRangeAverageSize = 0\n this.lastCalcIndex = 0\n this.fixedSizeValue = 0\n this.calcType = CALC_TYPE.INIT\n\n // scroll data.\n this.offset = 0\n this.direction = ''\n\n // range data.\n this.range = Object.create(null)\n if (this.param && !this.param.disabled) {\n this.checkRange(0, param.keeps - 1)\n }\n\n // benchmark test data.\n // this.__bsearchCalls = 0\n // this.__getIndexOffsetCalls = 0\n }\n\n destroy () {\n this.init(null, null)\n }\n\n // return actually render range.\n getRange () {\n const range = Object.create(null)\n range.start = this.range.start\n range.end = this.range.end\n range.padFront = this.range.padFront\n range.padBehind = this.range.padBehind\n return range\n }\n\n isLower () {\n return this.direction === DIRECTION_TYPE.BEHIND\n }\n\n isUpper () {\n return this.direction === DIRECTION_TYPE.FRONT\n }\n\n // return start index offset.\n getOffset (start) {\n return this.getIndexOffset(start)\n }\n\n updateParam (key, value) {\n if (this.param && (key in this.param)) {\n this.param[key] = value\n }\n }\n\n // save each size map by id.\n saveSize (id, size) {\n this.sizes.set(id, size)\n\n // we assume size type is fixed at the beginning and remember first size value\n // if there is no size value different from this at next comming saving\n // we think it's a fixed size list, otherwise is dynamic size list.\n if (this.calcType === CALC_TYPE.INIT) {\n this.fixedSizeValue = size\n this.calcType = CALC_TYPE.FIXED\n } else if (this.calcType === CALC_TYPE.FIXED && this.fixedSizeValue !== size) {\n this.calcType = CALC_TYPE.DYNAMIC\n // it's no use at all.\n delete this.fixedSizeValue\n }\n\n // calculate the average size only in the first range.\n if (this.sizes.size <= this.param.keeps) {\n this.firstRangeTotalSize = this.firstRangeTotalSize + size\n this.firstRangeAverageSize = Math.round(this.firstRangeTotalSize / this.sizes.size)\n } else {\n // it's done using.\n delete this.firstRangeTotalSize\n }\n }\n\n // in some special situation (e.g. length change) we need to update in a row\n // try goiong to render next range by a leading buffer according to current direction.\n handleDataSourcesChange () {\n let start = this.range.start\n\n if (this.direction === DIRECTION_TYPE.FRONT) {\n start = start - LEADING_BUFFER\n } else if (this.direction === DIRECTION_TYPE.BEHIND) {\n start = start + LEADING_BUFFER\n }\n\n start = Math.max(start, 0)\n\n this.updateRange(start, this.getEndByStart(start))\n }\n\n // when slot size change, we also need force update.\n handleSlotSizeChange () {\n this.handleDataSourcesChange()\n }\n\n // calculating range on scroll.\n handleScroll (offset) {\n if (this.param.disabled) {\n return\n }\n\n this.direction = offset < this.offset ? DIRECTION_TYPE.FRONT : DIRECTION_TYPE.BEHIND\n this.offset = offset\n\n if (this.direction === DIRECTION_TYPE.FRONT) {\n this.handleFront()\n } else if (this.direction === DIRECTION_TYPE.BEHIND) {\n this.handleBehind()\n }\n }\n\n // ----------- public method end. -----------\n\n handleFront () {\n const overs = this.getScrollOvers()\n // should not change range if start doesn't exceed overs.\n if (overs > this.range.start) {\n return\n }\n\n // move up start by a buffer length, and make sure its safety.\n const start = Math.max(overs - this.param.buffer, 0)\n this.checkRange(start, this.getEndByStart(start))\n }\n\n handleBehind () {\n const overs = this.getScrollOvers()\n // range should not change if scroll overs within buffer.\n if (overs < this.range.start + this.param.buffer) {\n return\n }\n\n this.checkRange(overs, this.getEndByStart(overs))\n }\n\n // return the pass over numbers at current scroll offset.\n getScrollOvers () {\n // if slot header exist, we need subtract its size.\n const offset = this.offset - this.param.slotHeaderSize\n if (offset <= 0) {\n return 0\n }\n\n // if this list is fixed size, that can be easily.\n if (this.isFixedType()) {\n return Math.floor(offset / this.fixedSizeValue)\n }\n\n let low = 0\n let middle = 0\n let middleOffset = 0\n let high = this.param.uniqueIds.length\n\n while (low <= high) {\n // this.__bsearchCalls++\n middle = low + Math.floor((high - low) / 2)\n middleOffset = this.getIndexOffset(middle)\n\n if (middleOffset === offset) {\n return middle\n } else if (middleOffset < offset) {\n low = middle + 1\n } else if (middleOffset > offset) {\n high = middle - 1\n }\n }\n\n return low > 0 ? --low : 0\n }\n\n // return a scroll offset from given index, can efficiency be improved more here?\n // although the call frequency is very high, its only a superposition of numbers.\n getIndexOffset (givenIndex) {\n // we know this.\n if (!givenIndex) {\n return 0\n }\n\n let offset = 0\n let indexSize = 0\n for (let index = 0; index <= givenIndex; index++) {\n // this.__getIndexOffsetCalls++\n indexSize = this.sizes.get(this.param.uniqueIds[index])\n offset = offset + (indexSize || this.getEstimateSize())\n }\n\n // remember last calculate index.\n this.lastCalcIndex = Math.max(this.lastCalcIndex, givenIndex - 1)\n this.lastCalcIndex = Math.min(this.lastCalcIndex, this.getLastIndex())\n\n return offset\n }\n\n isFixedType () {\n return this.calcType === CALC_TYPE.FIXED\n }\n\n // return the real last index.\n getLastIndex () {\n return this.param.uniqueIds.length - 1\n }\n\n // in some conditions range will break, we need check and correct it\n // and then decide whether need update to next range.\n checkRange (start, end) {\n const keeps = this.param.keeps\n const total = this.param.uniqueIds.length\n\n // datas less than keeps, render all.\n if (total <= keeps) {\n start = 0\n end = this.getLastIndex()\n } else if (end - start < keeps - 1) {\n // if range length is less than keeps, corrent it base on end.\n start = end - keeps + 1\n }\n\n if (this.range.start !== start) {\n this.updateRange(start, end)\n }\n }\n\n // call updating to a new range and rerender.\n updateRange (start, end) {\n this.range.start = start\n this.range.end = end\n this.range.padFront = this.getPadFront()\n this.range.padBehind = this.getPadBehind()\n\n if (!this.param.disabled) {\n this.updateHook(this.getRange())\n }\n }\n\n // return end base on start when going to a new range.\n getEndByStart (start) {\n const theoryEnd = start + this.param.keeps - 1\n const truelyEnd = Math.min(theoryEnd, this.getLastIndex())\n return truelyEnd\n }\n\n // return total front offset.\n getPadFront () {\n if (this.isFixedType()) {\n return this.fixedSizeValue * this.range.start\n } else {\n return this.getIndexOffset(this.range.start)\n }\n }\n\n // return total behind offset.\n // for better performance, use estimated value if a not calculated.\n getPadBehind () {\n const end = this.range.end\n const lastIndex = this.getLastIndex()\n\n if (this.isFixedType()) {\n return (lastIndex - end) * this.fixedSizeValue\n }\n\n // if calculated all already, return the exactly offset.\n if (this.lastCalcIndex === lastIndex) {\n return this.getIndexOffset(lastIndex) - this.getIndexOffset(end)\n } else {\n // if not, return a estimate offset.\n return (lastIndex - end) * this.getEstimateSize()\n }\n }\n\n // get estimate size for one item, get from param.size at first range.\n getEstimateSize () {\n return this.firstRangeAverageSize || this.param.size\n }\n}\n","/**\n * props declaration for default, item and slot component.\n */\n\nexport const VirtualProps = {\n size: {\n type: Number\n },\n keeps: {\n type: Number,\n require: true\n },\n\n dataKey: {\n type: String,\n require: true\n },\n dataSources: {\n type: Array,\n require: true\n },\n dataComponent: {\n type: Object,\n require: true\n },\n\n rootTag: {\n type: String,\n default: 'div'\n },\n wrapTag: {\n type: String,\n default: 'div'\n },\n wrapClass: {\n type: String,\n default: ''\n },\n\n direction: {\n type: String,\n default: 'vertical' // the other value is horizontal.\n },\n upperThreshold: {\n type: Number,\n default: 0\n },\n lowerThreshold: {\n type: Number,\n default: 0\n },\n start: {\n type: Number,\n default: 0\n },\n offset: {\n type: Number,\n default: 0\n },\n\n itemTag: {\n type: String,\n default: 'div'\n },\n itemClass: {\n type: String,\n default: ''\n },\n\n headerTag: {\n type: String,\n default: 'div'\n },\n headerClass: {\n type: String,\n default: ''\n },\n footerTag: {\n type: String,\n default: 'div'\n },\n footerClass: {\n type: String,\n default: ''\n },\n\n disabled: {\n type: Boolean,\n default: false\n }\n}\n\nexport const ItemProps = {\n event: {\n type: String\n },\n tag: {\n type: String\n },\n horizontal: {\n type: Boolean\n },\n source: {\n type: Object\n },\n component: {\n type: Object\n },\n uniqueKey: {\n type: String\n }\n}\n\nexport const SlotProps = {\n event: {\n type: String\n },\n uniqueKey: {\n String\n },\n tag: {\n type: String\n },\n horizontal: {\n type: Boolean\n }\n}\n","/**\n * item and slot component both use similar wrapper\n * we need to know their size change at any time.\n */\n\nimport Vue from 'vue'\nimport { ItemProps, SlotProps } from './props'\n\nconst Wrapper = {\n created () {\n this.hasInitial = false\n this.shapeKey = this.horizontal ? 'offsetWidth' : 'offsetHeight'\n },\n\n mounted () {\n // dispatch once at initial.\n this.dispatchSizeChange()\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => {\n // dispatch when size changed.\n if (this.hasInitial) {\n this.dispatchSizeChange()\n } else {\n this.hasInitial = true\n }\n })\n this.resizeObserver.observe(this.$el)\n }\n },\n\n beforeDestroy () {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n }\n },\n\n methods: {\n getCurrentSize () {\n return this.$el ? this.$el[this.shapeKey] : 0\n },\n\n // tell parent current size identify by unqiue key.\n dispatchSizeChange () {\n this.$parent.$emit(this.event, this.uniqueKey, this.getCurrentSize(), this.hasInitial)\n }\n }\n}\n\n// wrapping for item.\nexport const Item = Vue.component('virtual-list-item', {\n mixins: [Wrapper],\n\n props: ItemProps,\n\n render (h) {\n return h(this.tag, {\n role: 'item'\n }, [h(this.component, {\n props: this.source\n })])\n }\n})\n\n// wrapping for slot.\nexport const Slot = Vue.component('virtual-list-slot', {\n mixins: [Wrapper],\n\n props: SlotProps,\n\n render (h) {\n return h(this.tag, {\n attrs: {\n role: this.uniqueKey\n }\n }, this.$slots.default)\n }\n})\n","/**\n * virtual list default component.\n */\n\nimport Vue from 'vue'\nimport Virtual from './virtual'\nimport { Item, Slot } from './item'\nimport { VirtualProps } from './props'\n\nconst EVENT_TYPE = {\n ITEM: 'item_resize',\n SLOT: 'slot_resize'\n}\nconst SLOT_TYPE = {\n HEADER: 'header', // string value also use for aria role attribute.\n FOOTER: 'footer'\n}\n\nconst NAME = 'virtual-list'\n\nconst VirtualList = Vue.component(NAME, {\n props: VirtualProps,\n\n data () {\n return {\n range: null\n }\n },\n\n watch: {\n dataSources (newValue, oldValue) {\n if (newValue.length !== oldValue.length) {\n this.virtual.updateParam('uniqueIds', this.getUniqueIdFromDataSources())\n this.virtual.handleDataSourcesChange()\n }\n }\n },\n\n created () {\n this.isHorizontal = this.direction === 'horizontal'\n this.directionKey = this.isHorizontal ? 'scrollLeft' : 'scrollTop'\n\n this.virtual = new Virtual({\n size: this.size, // also could be a estimate value.\n slotHeaderSize: 0,\n slotFooterSize: 0,\n keeps: this.keeps,\n disabled: this.disabled,\n buffer: Math.round(this.keeps / 3), // recommend for a third of keeps.\n uniqueIds: this.getUniqueIdFromDataSources()\n }, this.onRangeChanged)\n\n // just for debug\n // window.virtual = this.virtual\n\n // also need sync initial range first.\n this.range = this.virtual.getRange()\n\n // listen item size changing.\n this.$on(EVENT_TYPE.ITEM, this.onItemResized)\n\n // listen slot size changing.\n if (this.$slots.header || this.$slots.footer) {\n this.$on(EVENT_TYPE.SLOT, this.onSlotResized)\n }\n },\n\n beforeDestroy () {\n this.virtual.destroy()\n },\n\n mounted () {\n // set position.\n if (this.start) {\n this.setScrollOffset(this.virtual.getOffset(this.start))\n } else if (this.offset) {\n this.setScrollOffset(this.offset)\n }\n },\n\n methods: {\n // event called when every item mounted or size changed.\n onItemResized (id, size) {\n this.virtual.saveSize(id, size)\n },\n\n // event called when slot mounted or size changed.\n onSlotResized (type, size, hasInit) {\n if (type === SLOT_TYPE.HEADER) {\n this.virtual.updateParam('slotHeaderSize', size)\n } else if (type === SLOT_TYPE.FOOTER) {\n this.virtual.updateParam('slotFooterSize', size)\n }\n\n if (hasInit) {\n this.virtual.handleSlotSizeChange()\n }\n },\n\n // here is the rerendering entry.\n onRangeChanged (range) {\n this.range = range\n },\n\n onScroll (evt) {\n const { root } = this.$refs\n if (!root) {\n return\n }\n\n const offset = root[this.directionKey]\n this.virtual.handleScroll(offset)\n this.emitEvent(offset, evt)\n },\n\n getUniqueIdFromDataSources () {\n return this.dataSources.map((dataSource) => dataSource[this.dataKey])\n },\n\n // set current scroll position to a expectant offset.\n setScrollOffset (offset) {\n const { root } = this.$refs\n if (root) {\n root[this.directionKey] = offset || 0\n }\n },\n\n // emit event in special position.\n emitEvent (offset, evt) {\n // ref element is definitely available here.\n const { root } = this.$refs\n const range = this.virtual.getRange()\n const isLower = this.virtual.isLower()\n const isUpper = this.virtual.isUpper()\n const offsetShape = root[this.isHorizontal ? 'clientWidth' : 'clientHeight']\n const scrollShape = root[this.isHorizontal ? 'scrollWidth' : 'scrollHeight']\n\n if (isUpper && !!this.dataSources.length && offset - this.upperThreshold <= 0) {\n this.$emit('totop', evt, range)\n } else if (isLower && offset + offsetShape + this.lowerThreshold >= scrollShape) {\n this.$emit('tobottom', evt, range)\n } else {\n this.$emit('scroll', evt, range)\n }\n },\n\n // get the real render slots based on range data.\n getRenderSlots (h) {\n const slots = []\n const start = this.disabled ? 0 : this.range.start\n const end = this.disabled ? this.dataSources.length - 1 : this.range.end\n\n for (let index = start; index <= end; index++) {\n const dataSource = this.dataSources[index]\n if (dataSource) {\n slots.push(h(Item, {\n class: this.itemClass,\n props: {\n tag: this.itemTag,\n event: EVENT_TYPE.ITEM,\n horizontal: this.isHorizontal,\n uniqueKey: dataSource[this.dataKey],\n source: dataSource,\n component: this.dataComponent\n }\n }))\n } else {\n console.warn(`[${NAME}]: cannot get the index ${index} from data-sources.`)\n }\n }\n\n return slots\n }\n },\n\n // render function, a closer-to-the-compiler alternative to templates.\n // https://vuejs.org/v2/guide/render-function.html#The-Data-Object-In-Depth\n render (h) {\n const { header, footer } = this.$slots\n const padding = this.isHorizontal\n ? `0px ${this.range.padBehind}px 0px ${this.range.padFront}px`\n : `${this.range.padFront}px 0px ${this.range.padBehind}px`\n\n return h(this.rootTag, {\n ref: 'root',\n on: {\n '&scroll': this.onScroll\n }\n }, [\n // header slot.\n header ? h(Slot, {\n class: this.headerClass,\n props: {\n tag: this.headerTag,\n event: EVENT_TYPE.SLOT,\n uniqueKey: SLOT_TYPE.HEADER\n }\n }, header) : null,\n\n // main list.\n h(this.wrapTag, {\n class: this.wrapClass,\n attrs: {\n role: 'group'\n },\n style: {\n padding: padding\n }\n }, this.getRenderSlots(h)),\n\n // footer slot.\n footer ? h(Slot, {\n class: this.footerClass,\n props: {\n tag: this.footerTag,\n event: EVENT_TYPE.SLOT,\n uniqueKey: SLOT_TYPE.FOOTER\n }\n }, footer) : null\n ])\n }\n})\n\nexport default VirtualList\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"introduction\",domProps:{\"innerHTML\":_vm._s(_vm.description)}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Introduction.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Introduction.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Introduction.vue?vue&type=template&id=0c507b69&scoped=true&\"\nimport script from \"./Introduction.vue?vue&type=script&lang=js&\"\nexport * from \"./Introduction.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Introduction.vue?vue&type=style&index=0&id=0c507b69&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0c507b69\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!!_vm.code)?_c('pre',{class:_vm.type,domProps:{\"innerHTML\":_vm._s(_vm.encode(_vm.code))}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodeHighLight.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodeHighLight.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CodeHighLight.vue?vue&type=template&id=99fd125a&scoped=true&\"\nimport script from \"./CodeHighLight.vue?vue&type=script&lang=js&\"\nexport * from \"./CodeHighLight.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CodeHighLight.vue?vue&type=style&index=0&id=99fd125a&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"99fd125a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isMobile)?_c('a',{staticClass:\"github-corner\",attrs:{\"href\":_vm.url,\"aria-label\":\"View source on GitHub\"}},[_c('svg',{staticStyle:{\"fill\":\"#9b4dca\",\"color\":\"#fff\",\"position\":\"absolute\",\"top\":\"0\",\"border\":\"0\",\"right\":\"0\",\"z-index\":\"1000\"},attrs:{\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 250 250\",\"aria-hidden\":\"true\"}},[_c('path',{attrs:{\"d\":\"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z\"}}),_c('path',{staticClass:\"octo-arm\",staticStyle:{\"transform-origin\":\"130px 106px\"},attrs:{\"d\":\"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2\",\"fill\":\"currentColor\"}}),_c('path',{staticClass:\"octo-body\",attrs:{\"d\":\"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z\",\"fill\":\"currentColor\"}})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n \n \n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Corner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Corner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Corner.vue?vue&type=template&id=821512e4&scoped=true&\"\nimport script from \"./Corner.vue?vue&type=script&lang=js&\"\nexport * from \"./Corner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Corner.vue?vue&type=style&index=0&id=821512e4&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"821512e4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"tab\"},[_c('div',{staticClass:\"tab-item view\",class:{active: _vm.isView},on:{\"click\":_vm.eventClickView}},[_vm._v(\"VIEW\")]),_c('div',{staticClass:\"tab-item code\",class:{active: !_vm.isView},on:{\"click\":_vm.eventClickCode}},[_vm._v(\"CODE\")]),_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isView),expression:\"!isView\"}],staticClass:\"complete-code-url\",attrs:{\"target\":\"_blank\",\"href\":_vm.completeCodeUrl}},[_vm._v(\"COMPLETE CODE\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Tab.vue?vue&type=template&id=13711752&scoped=true&\"\nimport script from \"./Tab.vue?vue&type=script&lang=js&\"\nexport * from \"./Tab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Tab.vue?vue&type=style&index=0&id=13711752&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13711752\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\nimport router from './router'\n\nimport VirtualList from '../../src/index'\nimport Introduction from './components/Introduction'\nimport CodeHighLight from './components/CodeHighLight'\nimport Corner from './components/Corner'\nimport Tab from './components/Tab'\n\nVue.component('virtual-list', VirtualList)\nVue.component(Introduction.name, Introduction)\nVue.component(CodeHighLight.name, CodeHighLight)\nVue.component(Corner.name, Corner)\nVue.component(Tab.name, Tab)\n\nVue.config.devtools = false\nVue.config.productionTip = false\n\nnew Vue({\n router,\n render: h => h(App)\n}).$mount('#app')\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodeHighLight.vue?vue&type=style&index=0&id=99fd125a&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodeHighLight.vue?vue&type=style&index=0&id=99fd125a&lang=less&scoped=true&\"","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=less&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=less&\"","const ua = navigator.userAgent\nconst Android = !!ua.match(/Android/i)\nconst iOS = !!ua.match(/iPhone|iPad|iPod/i)\nexport const isMobile = Android || iOS\n","// config and constants.\n\nexport const TOTAL_COUNT = 10000\n\nexport const TAB_TYPE = {\n VIEW: 1,\n CODE: 2\n}\n\nexport const DEFAULT_TAB = TAB_TYPE.VIEW\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Introduction.vue?vue&type=style&index=0&id=0c507b69&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Introduction.vue?vue&type=style&index=0&id=0c507b69&lang=less&scoped=true&\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/docs/js/app.fd55a986.js b/docs/js/app.fd55a986.js
deleted file mode 100644
index 7730935..0000000
--- a/docs/js/app.fd55a986.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(e){function t(t){for(var n,a,o=t[0],l=t[1],u=t[2],c=0,h=[];cthis.range.start)){var t=Math.max(e-this.param.buffer,0);this.checkRange(t,this.getEndByStart(t))}}},{key:"handleBehind",value:function(){var e=this.getScrollOvers();ee&&(a=i-1)}return t>0?--t:0}},{key:"getIndexOffset",value:function(e){if(!e)return 0;for(var t=0,i=0,n=0;n<=e;n++)i=this.sizes.get(this.param.uniqueIds[n]),t+=i||this.getEstimateSize();return this.lastCalcIndex=Math.max(this.lastCalcIndex,e-1),this.lastCalcIndex=Math.min(this.lastCalcIndex,this.getLastIndex()),t}},{key:"isFixedType",value:function(){return this.calcType===x.FIXED}},{key:"getLastIndex",value:function(){return this.param.uniqueIds.length-1}},{key:"checkRange",value:function(e,t){var i=this.param.keeps,n=this.param.uniqueIds.length;n<=i?(e=0,t=this.getLastIndex()):t-e=o?this.$emit("tobottom",t,n):this.$emit("scroll",t,n)},getRenderSlots:function(e){for(var t=[],i=this.disabled?0:this.range.start,n=this.disabled?this.dataSources.length-1:this.range.end,a=i;a<=n;a++){var s=this.dataSources[a];s?t.push(e(w,{class:this.itemClass,props:{tag:this.itemTag,event:F.ITEM,horizontal:this.isHorizontal,uniqueKey:s[this.dataKey],source:s,component:this.dataComponent}})):console.warn("[".concat(N,"]: cannot get the index ").concat(a," from data-sources."))}return t}},render:function(e){var t=this.$slots,i=t.header,n=t.footer,a=this.isHorizontal?"0px ".concat(this.range.padBehind,"px 0px ").concat(this.range.padFront,"px"):"".concat(this.range.padFront,"px 0px ").concat(this.range.padBehind,"px");return e(this.rootTag,{ref:"root",on:{"&scroll":this.onScroll}},[i?e(R,{class:this.headerClass,props:{tag:this.headerTag,event:F.SLOT,uniqueKey:D.HEADER}},i):null,e(this.wrapTag,{class:this.wrapClass,attrs:{role:"group"},style:{padding:a}},this.getRenderSlots(e)),n?e(R,{class:this.footerClass,props:{tag:this.footerTag,event:F.SLOT,uniqueKey:D.FOOTER}},n):null])}}),M=$,P=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"introduction",domProps:{innerHTML:e._s(e.description)}})},j=[],B={name:"introduction",props:{description:{type:String}}},H=B,L=(i("de3a"),Object(r["a"])(H,P,j,!1,null,"0c507b69",null)),q=L.exports,V=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.code?i("pre",{class:e.type,domProps:{innerHTML:e._s(e.encode(e.code))}}):e._e()},A=[],K=(i("ac1f"),i("5319"),{name:"code-high-light",props:{type:{type:String,required:!0},code:{type:String,required:!0}},mounted:function(){"undefined"!==typeof window.hljs&&this.$el.textContent&&window.hljs.highlightBlock(this.$el)},methods:{encode:function(e){return"html"===this.type&&(e=e.replace(//g,">")),e=e.replace(/\s/,""),e}}}),U=K,W=(i("595a"),Object(r["a"])(U,V,A,!1,null,"99fd125a",null)),X=W.exports,Y=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isMobile?e._e():i("a",{staticClass:"github-corner",attrs:{href:e.url,"aria-label":"View source on GitHub"}},[i("svg",{staticStyle:{fill:"#9b4dca",color:"#fff",position:"absolute",top:"0",border:"0",right:"0","z-index":"1000"},attrs:{width:e.size,height:e.size,viewBox:"0 0 250 250","aria-hidden":"true"}},[i("path",{attrs:{d:"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"}}),i("path",{staticClass:"octo-arm",staticStyle:{"transform-origin":"130px 106px"},attrs:{d:"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2",fill:"currentColor"}}),i("path",{staticClass:"octo-body",attrs:{d:"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z",fill:"currentColor"}})])])},J=[],Z=i("835c"),G=i("3f05"),Q={name:"github-corner",data:function(){return{url:"",size:80,isMobile:Z["a"]}},mounted:function(){this.url=Object(G["a"])()}},ee=Q,te=(i("3f57"),Object(r["a"])(ee,Y,J,!1,null,"821512e4",null)),ie=te.exports,ne=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"tab"},[i("div",{staticClass:"tab-item view",class:{active:e.isView},on:{click:e.eventClickView}},[e._v("VIEW")]),i("div",{staticClass:"tab-item code",class:{active:!e.isView},on:{click:e.eventClickCode}},[e._v("CODE")]),i("a",{directives:[{name:"show",rawName:"v-show",value:!e.isView,expression:"!isView"}],staticClass:"complete-code-url",attrs:{target:"_blank",href:e.completeCodeUrl}},[e._v("COMPLETE CODE")])])},ae=[],se=i("b95e"),re={name:"tab",data:function(){return{completeCodeUrl:"",active:se["a"]}},computed:{isView:function(){return this.active===se["b"].VIEW}},mounted:function(){this.completeCodeUrl=Object(G["a"])()},methods:{eventClickView:function(){this.active=se["b"].VIEW,this.emitEvent()},eventClickCode:function(){this.active=se["b"].CODE,this.emitEvent()},emitEvent:function(){this.$emit("tab-change",this.active)}}},oe=re,le=(i("2345"),Object(r["a"])(oe,ne,ae,!1,null,"13711752",null)),ue=le.exports;n["a"].component("virtual-list",M),n["a"].component(q.name,q),n["a"].component(X.name,X),n["a"].component(ie.name,ie),n["a"].component(ue.name,ue),n["a"].config.devtools=!1,n["a"].config.productionTip=!1,new n["a"]({router:z,render:function(e){return e(u)}}).$mount("#app")},"595a":function(e,t,i){"use strict";var n=i("a5ff"),a=i.n(n);a.a},"67ef":function(e,t,i){},"7c55":function(e,t,i){"use strict";var n=i("2395"),a=i.n(n);a.a},"835c":function(e,t,i){"use strict";i.d(t,"a",(function(){return r}));i("ac1f"),i("466d");var n=navigator.userAgent,a=!!n.match(/Android/i),s=!!n.match(/iPhone|iPad|iPod/i),r=a||s},a5ff:function(e,t,i){},a762:function(e,t,i){"use strict";var n=i("06b1"),a=i.n(n);a.a},b95e:function(e,t,i){"use strict";i.d(t,"c",(function(){return n})),i.d(t,"b",(function(){return a})),i.d(t,"a",(function(){return s}));var n=1e4,a={VIEW:1,CODE:2},s=a.VIEW},caf6:function(e,t,i){},de3a:function(e,t,i){"use strict";var n=i("2f31"),a=i.n(n);a.a}});
-//# sourceMappingURL=app.fd55a986.js.map
\ No newline at end of file
diff --git a/docs/js/app.fd55a986.js.map b/docs/js/app.fd55a986.js.map
deleted file mode 100644
index 96c9a05..0000000
--- a/docs/js/app.fd55a986.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Tab.vue?8914","webpack:///./src/common/get-code-url.js","webpack:///./src/components/Corner.vue?baf6","webpack:///./src/App.vue?ced9","webpack:///./src/App.vue?bff9","webpack:///./src/views/index/Main.vue?c75f","webpack:///src/views/index/Main.vue","webpack:///./src/views/index/Main.vue?9578","webpack:///./src/views/index/Main.vue","webpack:///./src/router/index.js","webpack:///../src/virtual.js","webpack:///../src/props.js","webpack:///../src/item.js","webpack:///../src/index.js","webpack:///./src/components/Introduction.vue?bbc7","webpack:///src/components/Introduction.vue","webpack:///./src/components/Introduction.vue?8836","webpack:///./src/components/Introduction.vue","webpack:///./src/components/CodeHighLight.vue?6132","webpack:///src/components/CodeHighLight.vue","webpack:///./src/components/CodeHighLight.vue?c9ca","webpack:///./src/components/CodeHighLight.vue","webpack:///./src/components/Corner.vue?a6db","webpack:///src/components/Corner.vue","webpack:///./src/components/Corner.vue?80c1","webpack:///./src/components/Corner.vue","webpack:///./src/components/Tab.vue?70cf","webpack:///src/components/Tab.vue","webpack:///./src/components/Tab.vue?1581","webpack:///./src/components/Tab.vue","webpack:///./src/main.js","webpack:///./src/components/CodeHighLight.vue?0b70","webpack:///./src/App.vue?a173","webpack:///./src/common/ua.js","webpack:///./src/views/index/Main.vue?7e48","webpack:///./src/common/const.js","webpack:///./src/components/Introduction.vue?f996"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","hashValue","location","hash","substr","_vm","this","_h","$createElement","_c","_self","attrs","_v","staticRenderFns","component","staticClass","_m","Vue","use","VueRouter","routes","path","Index","router","DIRECTION_TYPE","FRONT","BEHIND","CALC_TYPE","INIT","FIXED","DYNAMIC","LEADING_BUFFER","Virtual","param","updateHook","init","sizes","Map","firstRangeTotalSize","firstRangeAverageSize","lastCalcIndex","fixedSizeValue","calcType","offset","direction","range","disabled","checkRange","keeps","start","end","padFront","padBehind","getIndexOffset","id","size","set","Math","round","max","updateRange","getEndByStart","handleDataSourcesChange","handleFront","handleBehind","overs","getScrollOvers","buffer","slotHeaderSize","isFixedType","floor","low","middle","middleOffset","high","uniqueIds","givenIndex","indexSize","index","getEstimateSize","min","getLastIndex","total","getPadFront","getPadBehind","getRange","theoryEnd","truelyEnd","lastIndex","VirtualProps","Number","require","dataKey","String","dataSources","Array","dataComponent","rootTag","default","wrapTag","wrapClass","upperThreshold","lowerThreshold","itemTag","itemClass","headerTag","headerClass","footerTag","footerClass","Boolean","ItemProps","horizontal","source","uniqueKey","SlotProps","Wrapper","created","hasInitial","shapeKey","mounted","dispatchSizeChange","ResizeObserver","resizeObserver","observe","$el","beforeDestroy","disconnect","methods","getCurrentSize","$parent","$emit","Item","mixins","props","render","h","role","Slot","$slots","EVENT_TYPE","ITEM","SLOT","SLOT_TYPE","HEADER","FOOTER","NAME","VirtualList","watch","newValue","oldValue","virtual","updateParam","getUniqueIdFromDataSources","isHorizontal","directionKey","slotFooterSize","onRangeChanged","$on","onItemResized","header","footer","onSlotResized","destroy","setScrollOffset","getOffset","saveSize","hasInit","handleSlotSizeChange","onScroll","evt","root","$refs","handleScroll","emitEvent","map","dataSource","isLower","isUpper","offsetShape","scrollShape","getRenderSlots","slots","class","warn","padding","ref","on","style","domProps","_s","description","encode","_e","required","hljs","textContent","highlightBlock","replace","isMobile","url","staticStyle","active","isView","eventClickView","eventClickCode","directives","rawName","expression","completeCodeUrl","computed","Introduction","CodeHighLight","Corner","Tab","config","devtools","productionTip","App","$mount","ua","navigator","userAgent","Android","match","iOS","TOTAL_COUNT","TAB_TYPE","VIEW","CODE","DEFAULT_TAB"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxB,IAAO,GAMJjB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASa,EAAe7B,GACvB,OAAOyB,EAAoBK,EAAI,OAAS,CAAC,iEAAiE,iEAAiE,eAAe,eAAe,aAAa,aAAa,WAAa,aAAa,mBAAmB,mBAAmB,aAAa,cAAc9B,IAAUA,GAAW,IAAM,CAAC,iEAAiE,WAAW,eAAe,WAAW,aAAa,WAAW,WAAa,WAAW,mBAAmB,WAAW,aAAa,YAAYA,GAAW,MAInjB,SAASyB,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAUgC,QAGnC,IAAIC,EAASL,EAAiB5B,GAAY,CACzCK,EAAGL,EACHkC,GAAG,EACHF,QAAS,IAUV,OANAlB,EAAQd,GAAUW,KAAKsB,EAAOD,QAASC,EAAQA,EAAOD,QAASN,GAG/DO,EAAOC,GAAI,EAGJD,EAAOD,QAKfN,EAAoBS,EAAI,SAAuBlC,GAC9C,IAAImC,EAAW,GAIXC,EAAY,CAAC,eAAe,EAAE,aAAa,EAAE,WAAa,EAAE,mBAAmB,EAAE,aAAa,GAC/FR,EAAmB5B,GAAUmC,EAASvB,KAAKgB,EAAmB5B,IACzB,IAAhC4B,EAAmB5B,IAAkBoC,EAAUpC,IACtDmC,EAASvB,KAAKgB,EAAmB5B,GAAW,IAAIqC,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,QAAU,CAAC,iEAAiE,iEAAiE,eAAe,eAAe,aAAa,aAAa,WAAa,aAAa,mBAAmB,mBAAmB,aAAa,cAAcxC,IAAUA,GAAW,IAAM,CAAC,iEAAiE,WAAW,eAAe,WAAW,aAAa,WAAW,WAAa,WAAW,mBAAmB,WAAW,aAAa,YAAYA,GAAW,OAC3hByC,EAAWhB,EAAoBK,EAAIU,EACnCE,EAAmBC,SAASC,qBAAqB,QAC7CxC,EAAI,EAAGA,EAAIsC,EAAiBpC,OAAQF,IAAK,CAChD,IAAIyC,EAAMH,EAAiBtC,GACvB0C,EAAWD,EAAIE,aAAa,cAAgBF,EAAIE,aAAa,QACjE,GAAe,eAAZF,EAAIG,MAAyBF,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,IAErF,IAAIW,EAAoBN,SAASC,qBAAqB,SACtD,IAAQxC,EAAI,EAAGA,EAAI6C,EAAkB3C,OAAQF,IAAK,CAC7CyC,EAAMI,EAAkB7C,GACxB0C,EAAWD,EAAIE,aAAa,aAChC,GAAGD,IAAaN,GAAQM,IAAaL,EAAU,OAAOH,IAEvD,IAAIY,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAASf,EACjBY,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOjB,EACvDkB,EAAM,IAAIC,MAAM,qBAAuB5D,EAAU,cAAgBwD,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP5B,EAAmB5B,GAC1BkD,EAAQY,WAAWC,YAAYb,GAC/BX,EAAOoB,IAERT,EAAQV,KAAOC,EAEf,IAAIuB,EAAOrB,SAASC,qBAAqB,QAAQ,GACjDoB,EAAKC,YAAYf,MACfgB,MAAK,WACPtC,EAAmB5B,GAAW,MAMhC,IAAImE,EAAqBxD,EAAgBX,GACzC,GAA0B,IAAvBmE,EAGF,GAAGA,EACFhC,EAASvB,KAAKuD,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqBxD,EAAgBX,GAAW,CAACsC,EAASC,MAE3DJ,EAASvB,KAAKuD,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS3B,SAASQ,cAAc,UAGpCmB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACb/C,EAAoBgD,IACvBH,EAAOI,aAAa,QAASjD,EAAoBgD,IAElDH,EAAOZ,IAAM7B,EAAe7B,GAG5B,IAAI2E,EAAQ,IAAIf,MAChBS,EAAmB,SAAUd,GAE5Be,EAAOhB,QAAUgB,EAAOjB,OAAS,KACjCuB,aAAaJ,GACb,IAAIK,EAAQlE,EAAgBX,GAC5B,GAAa,IAAV6E,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmBhF,EAAU,cAAgB8E,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,GAEVhE,EAAgBX,QAAWkF,IAG7B,IAAIV,EAAUW,YAAW,WACxBd,EAAiB,CAAEjB,KAAM,UAAWK,OAAQa,MAC1C,MACHA,EAAOhB,QAAUgB,EAAOjB,OAASgB,EACjC1B,SAASqB,KAAKC,YAAYK,GAG5B,OAAOjC,QAAQ+C,IAAIjD,IAIpBV,EAAoB4D,EAAIxE,EAGxBY,EAAoB6D,EAAI3D,EAGxBF,EAAoB8D,EAAI,SAASxD,EAASkD,EAAMO,GAC3C/D,EAAoBgE,EAAE1D,EAASkD,IAClC1E,OAAOmF,eAAe3D,EAASkD,EAAM,CAAEU,YAAY,EAAMC,IAAKJ,KAKhE/D,EAAoBoE,EAAI,SAAS9D,GACX,qBAAX+D,QAA0BA,OAAOC,aAC1CxF,OAAOmF,eAAe3D,EAAS+D,OAAOC,YAAa,CAAEC,MAAO,WAE7DzF,OAAOmF,eAAe3D,EAAS,aAAc,CAAEiE,OAAO,KAQvDvE,EAAoBwE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvE,EAAoBuE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7F,OAAO8F,OAAO,MAGvB,GAFA5E,EAAoBoE,EAAEO,GACtB7F,OAAOmF,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvE,EAAoB8D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3E,EAAoB+E,EAAI,SAASxE,GAChC,IAAIwD,EAASxD,GAAUA,EAAOmE,WAC7B,WAAwB,OAAOnE,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAP,EAAoB8D,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/D,EAAoBgE,EAAI,SAASgB,EAAQC,GAAY,OAAOnG,OAAOC,UAAUC,eAAeC,KAAK+F,EAAQC,IAGzGjF,EAAoBK,EAAI,GAGxBL,EAAoBkF,GAAK,SAAShD,GAA2B,MAApBiD,QAAQjC,MAAMhB,GAAYA,GAEnE,IAAIkD,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAWjG,KAAK2F,KAAKM,GAC5CA,EAAWjG,KAAOf,EAClBgH,EAAaA,EAAWG,QACxB,IAAI,IAAI5G,EAAI,EAAGA,EAAIyG,EAAWvG,OAAQF,IAAKP,EAAqBgH,EAAWzG,IAC3E,IAAIU,EAAsBiG,EAI1B/F,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,oGC1QT,yBAAoiB,EAAG,G,oFCAxhB,kBACb,IAAM+F,GAAaC,SAASC,MAAQ,IAAIC,OAAO,GAC/C,OAAIH,EACF,sFAAsFA,EAAtF,aAEA,sD,oCCLJ,yBAAuiB,EAAG,G,6GCAtiB,EAAS,WAAa,IAAII,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,QAAQ,CAACF,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,QAAQ,CAACF,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,MAAM,CAACN,EAAIO,GAAG,UAAUH,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,gBAAgB,CAACN,EAAIO,GAAG,gBAAgBH,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,kBAAkB,CAACN,EAAIO,GAAG,kBAAkBH,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,gBAAgB,CAACN,EAAIO,GAAG,gBAAgBH,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,sBAAsB,CAACN,EAAIO,GAAG,sBAAsBH,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,gBAAgB,CAACN,EAAIO,GAAG,iBAAiB,GAAGH,EAAG,gBAAgB,IACrlBI,EAAkB,G,wBCAlBvD,EAAS,GAMTwD,EAAY,eACdxD,EACA,EACAuD,GACA,EACA,KACA,KACA,MAIa,EAAAC,E,gCClBX,EAAS,WAAa,IAAIT,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,YAAY,SAAS,CAACN,EAAG,iBAAiBA,EAAG,KAAK,CAACM,YAAY,QAAQ,CAACV,EAAIO,GAAG,6BAA6BP,EAAIW,GAAG,GAAGP,EAAG,KAAK,CAACM,YAAY,SAAS,CAACV,EAAIO,GAAG,yBAAyBP,EAAIW,GAAG,GAAGP,EAAG,KAAK,CAACM,YAAY,SAAS,CAACV,EAAIO,GAAG,WAAWP,EAAIW,GAAG,IAAI,IACjW,EAAkB,CAAC,WAAa,IAAIX,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,YAAY,QAAQ,CAACN,EAAG,MAAM,CAACE,MAAM,CAAC,IAAM,qGAAqG,WAAa,IAAIN,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIO,GAAG,uCAAuCH,EAAG,KAAK,CAACJ,EAAIO,GAAG,iEAAiEH,EAAG,KAAK,CAACJ,EAAIO,GAAG,gFAAgFH,EAAG,KAAK,CAACJ,EAAIO,GAAG,2FAA2F,WAAa,IAAIP,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIO,GAAG,yCAAyCH,EAAG,KAAK,CAACJ,EAAIO,GAAG,wCAAwCH,EAAG,KAAK,CAACJ,EAAIO,GAAG,gBC2Bj5B,GACE3C,KAAM,QAENnF,KAHF,WAII,MAAO,KChCkV,ICQzV,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCffmI,OAAIC,IAAIC,QAEN,IAAMC,EAAS,CACf,CACEC,KAAM,IACNpD,KAAM,QACN6C,UAAWQ,GAEb,CACED,KAAM,cACNpD,KAAM,aACN6C,UAAW,kBAAM,mIAEnB,CACEO,KAAM,gBACNpD,KAAM,eACN6C,UAAW,kBAAM,qIAEnB,CACEO,KAAM,cACNpD,KAAM,aACN6C,UAAW,kBAAM,mIAEnB,CACEO,KAAM,oBACNpD,KAAM,mBACN6C,UAAW,kBAAM,yIAEnB,CACEO,KAAM,cACNpD,KAAM,aACN6C,UAAW,kBAAM,oIAIfS,EAAS,IAAIJ,OAAU,CAC3BC,WAGaG,I,4ECvCTC,EAAiB,CACrBC,MAAO,QACPC,OAAQ,UAEJC,EAAY,CAChBC,KAAM,OACNC,MAAO,QACPC,QAAS,WAELC,EAAiB,EAEFC,E,WACnB,WAAaC,EAAOC,GAAY,uBAC9B5B,KAAK6B,KAAKF,EAAOC,G,oDAGbD,EAAOC,GAEX5B,KAAK2B,MAAQA,EACb3B,KAAK4B,WAAaA,EAGlB5B,KAAK8B,MAAQ,IAAIC,IACjB/B,KAAKgC,oBAAsB,EAC3BhC,KAAKiC,sBAAwB,EAC7BjC,KAAKkC,cAAgB,EACrBlC,KAAKmC,eAAiB,EACtBnC,KAAKoC,SAAWf,EAAUC,KAG1BtB,KAAKqC,OAAS,EACdrC,KAAKsC,UAAY,GAGjBtC,KAAKuC,MAAQtJ,OAAO8F,OAAO,MACvBiB,KAAK2B,QAAU3B,KAAK2B,MAAMa,UAC5BxC,KAAKyC,WAAW,EAAGd,EAAMe,MAAQ,K,gCASnC1C,KAAK6B,KAAK,KAAM,Q,iCAKhB,IAAMU,EAAQtJ,OAAO8F,OAAO,MAK5B,OAJAwD,EAAMI,MAAQ3C,KAAKuC,MAAMI,MACzBJ,EAAMK,IAAM5C,KAAKuC,MAAMK,IACvBL,EAAMM,SAAW7C,KAAKuC,MAAMM,SAC5BN,EAAMO,UAAY9C,KAAKuC,MAAMO,UACtBP,I,gCAIP,OAAOvC,KAAKsC,YAAcpB,EAAeE,S,gCAIzC,OAAOpB,KAAKsC,YAAcpB,EAAeC,Q,gCAIhCwB,GACT,OAAO3C,KAAK+C,eAAeJ,K,kCAGhB3D,EAAKN,GACZsB,KAAK2B,OAAU3C,KAAOgB,KAAK2B,QAC7B3B,KAAK2B,MAAM3C,GAAON,K,+BAKZsE,EAAIC,GACZjD,KAAK8B,MAAMoB,IAAIF,EAAIC,GAKfjD,KAAKoC,WAAaf,EAAUC,MAC9BtB,KAAKmC,eAAiBc,EACtBjD,KAAKoC,SAAWf,EAAUE,OACjBvB,KAAKoC,WAAaf,EAAUE,OAASvB,KAAKmC,iBAAmBc,IACtEjD,KAAKoC,SAAWf,EAAUG,eAEnBxB,KAAKmC,gBAIVnC,KAAK8B,MAAMmB,MAAQjD,KAAK2B,MAAMe,OAChC1C,KAAKgC,oBAAsBhC,KAAKgC,oBAAsBiB,EACtDjD,KAAKiC,sBAAwBkB,KAAKC,MAAMpD,KAAKgC,oBAAsBhC,KAAK8B,MAAMmB,cAGvEjD,KAAKgC,sB,gDAOd,IAAIW,EAAQ3C,KAAKuC,MAAMI,MAEnB3C,KAAKsC,YAAcpB,EAAeC,MACpCwB,GAAgBlB,EACPzB,KAAKsC,YAAcpB,EAAeE,SAC3CuB,GAAgBlB,GAGlBkB,EAAQQ,KAAKE,IAAIV,EAAO,GAExB3C,KAAKsD,YAAYX,EAAO3C,KAAKuD,cAAcZ,M,6CAK3C3C,KAAKwD,4B,mCAIOnB,GACRrC,KAAK2B,MAAMa,WAIfxC,KAAKsC,UAAYD,EAASrC,KAAKqC,OAASnB,EAAeC,MAAQD,EAAeE,OAC9EpB,KAAKqC,OAASA,EAEVrC,KAAKsC,YAAcpB,EAAeC,MACpCnB,KAAKyD,cACIzD,KAAKsC,YAAcpB,EAAeE,QAC3CpB,KAAK0D,kB,oCAOP,IAAMC,EAAQ3D,KAAK4D,iBAEnB,KAAID,EAAQ3D,KAAKuC,MAAMI,OAAvB,CAKA,IAAMA,EAAQQ,KAAKE,IAAIM,EAAQ3D,KAAK2B,MAAMkC,OAAQ,GAClD7D,KAAKyC,WAAWE,EAAO3C,KAAKuD,cAAcZ,O,qCAI1C,IAAMgB,EAAQ3D,KAAK4D,iBAEfD,EAAQ3D,KAAKuC,MAAMI,MAAQ3C,KAAK2B,MAAMkC,QAI1C7D,KAAKyC,WAAWkB,EAAO3D,KAAKuD,cAAcI,M,uCAM1C,IAAMtB,EAASrC,KAAKqC,OAASrC,KAAK2B,MAAMmC,eACxC,GAAIzB,GAAU,EACZ,OAAO,EAIT,GAAIrC,KAAK+D,cACP,OAAOZ,KAAKa,MAAM3B,EAASrC,KAAKmC,gBAGlC,IAAI8B,EAAM,EACNC,EAAS,EACTC,EAAe,EACfC,EAAOpE,KAAK2B,MAAM0C,UAAUrL,OAEhC,MAAOiL,GAAOG,EAAM,CAKlB,GAHAF,EAASD,EAAMd,KAAKa,OAAOI,EAAOH,GAAO,GACzCE,EAAenE,KAAK+C,eAAemB,GAE/BC,IAAiB9B,EACnB,OAAO6B,EACEC,EAAe9B,EACxB4B,EAAMC,EAAS,EACNC,EAAe9B,IACxB+B,EAAOF,EAAS,GAIpB,OAAOD,EAAM,IAAMA,EAAM,I,qCAKXK,GAEd,IAAKA,EACH,OAAO,EAKT,IAFA,IAAIjC,EAAS,EACTkC,EAAY,EACPC,EAAQ,EAAGA,GAASF,EAAYE,IAEvCD,EAAYvE,KAAK8B,MAAMxD,IAAI0B,KAAK2B,MAAM0C,UAAUG,IAChDnC,GAAmBkC,GAAavE,KAAKyE,kBAOvC,OAHAzE,KAAKkC,cAAgBiB,KAAKE,IAAIrD,KAAKkC,cAAeoC,EAAa,GAC/DtE,KAAKkC,cAAgBiB,KAAKuB,IAAI1E,KAAKkC,cAAelC,KAAK2E,gBAEhDtC,I,oCAIP,OAAOrC,KAAKoC,WAAaf,EAAUE,Q,qCAKnC,OAAOvB,KAAK2B,MAAM0C,UAAUrL,OAAS,I,iCAK3B2J,EAAOC,GACjB,IAAMF,EAAQ1C,KAAK2B,MAAMe,MACnBkC,EAAQ5E,KAAK2B,MAAM0C,UAAUrL,OAG/B4L,GAASlC,GACXC,EAAQ,EACRC,EAAM5C,KAAK2E,gBACF/B,EAAMD,EAAQD,EAAQ,IAE/BC,EAAQC,EAAMF,EAAQ,GAGpB1C,KAAKuC,MAAMI,QAAUA,GACvB3C,KAAKsD,YAAYX,EAAOC,K,kCAKfD,EAAOC,GAClB5C,KAAKuC,MAAMI,MAAQA,EACnB3C,KAAKuC,MAAMK,IAAMA,EACjB5C,KAAKuC,MAAMM,SAAW7C,KAAK6E,cAC3B7E,KAAKuC,MAAMO,UAAY9C,KAAK8E,eAEvB9E,KAAK2B,MAAMa,UACdxC,KAAK4B,WAAW5B,KAAK+E,c,oCAKVpC,GACb,IAAMqC,EAAYrC,EAAQ3C,KAAK2B,MAAMe,MAAQ,EACvCuC,EAAY9B,KAAKuB,IAAIM,EAAWhF,KAAK2E,gBAC3C,OAAOM,I,oCAKP,OAAIjF,KAAK+D,cACA/D,KAAKmC,eAAiBnC,KAAKuC,MAAMI,MAEjC3C,KAAK+C,eAAe/C,KAAKuC,MAAMI,S,qCAOxC,IAAMC,EAAM5C,KAAKuC,MAAMK,IACjBsC,EAAYlF,KAAK2E,eAEvB,OAAI3E,KAAK+D,eACCmB,EAAYtC,GAAO5C,KAAKmC,eAI9BnC,KAAKkC,gBAAkBgD,EAClBlF,KAAK+C,eAAemC,GAAalF,KAAK+C,eAAeH,IAGpDsC,EAAYtC,GAAO5C,KAAKyE,oB,wCAMlC,OAAOzE,KAAKiC,uBAAyBjC,KAAK2B,MAAMsB,S,KC5SvCkC,G,UAAe,CAC1BlC,KAAM,CACJnH,KAAMsJ,QAER1C,MAAO,CACL5G,KAAMsJ,OACNC,SAAS,GAGXC,QAAS,CACPxJ,KAAMyJ,OACNF,SAAS,GAEXG,YAAa,CACX1J,KAAM2J,MACNJ,SAAS,GAEXK,cAAe,CACb5J,KAAM7C,OACNoM,SAAS,GAGXM,QAAS,CACP7J,KAAMyJ,OACNK,QAAS,OAEXC,QAAS,CACP/J,KAAMyJ,OACNK,QAAS,OAEXE,UAAW,CACThK,KAAMyJ,OACNK,QAAS,IAGXtD,UAAW,CACTxG,KAAMyJ,OACNK,QAAS,YAEXG,eAAgB,CACdjK,KAAMsJ,OACNQ,QAAS,GAEXI,eAAgB,CACdlK,KAAMsJ,OACNQ,QAAS,GAEXjD,MAAO,CACL7G,KAAMsJ,OACNQ,QAAS,GAEXvD,OAAQ,CACNvG,KAAMsJ,OACNQ,QAAS,GAGXK,QAAS,CACPnK,KAAMyJ,OACNK,QAAS,OAEXM,UAAW,CACTpK,KAAMyJ,OACNK,QAAS,IAGXO,UAAW,CACTrK,KAAMyJ,OACNK,QAAS,OAEXQ,YAAa,CACXtK,KAAMyJ,OACNK,QAAS,IAEXS,UAAW,CACTvK,KAAMyJ,OACNK,QAAS,OAEXU,YAAa,CACXxK,KAAMyJ,OACNK,QAAS,IAGXpD,SAAU,CACR1G,KAAMyK,QACNX,SAAS,KAIAY,EAAY,CACvBvK,MAAO,CACLH,KAAMyJ,QAERhK,IAAK,CACHO,KAAMyJ,QAERkB,WAAY,CACV3K,KAAMyK,SAERG,OAAQ,CACN5K,KAAM7C,QAERuH,UAAW,CACT1E,KAAM7C,QAER0N,UAAW,CACT7K,KAAMyJ,SAIGqB,EAAY,CACvB3K,MAAO,CACLH,KAAMyJ,QAERoB,UAAW,CACTpB,eAEFhK,IAAK,CACHO,KAAMyJ,QAERkB,WAAY,CACV3K,KAAMyK,UCpHJM,EAAU,CACdC,QADc,WAEZ9G,KAAK+G,YAAa,EAClB/G,KAAKgH,SAAWhH,KAAKyG,WAAa,cAAgB,gBAGpDQ,QANc,WAMH,WAETjH,KAAKkH,qBAEyB,qBAAnBC,iBACTnH,KAAKoH,eAAiB,IAAID,gBAAe,WAEnC,EAAKJ,WACP,EAAKG,qBAEL,EAAKH,YAAa,KAGtB/G,KAAKoH,eAAeC,QAAQrH,KAAKsH,OAIrCC,cAvBc,WAwBRvH,KAAKoH,iBACPpH,KAAKoH,eAAeI,aACpBxH,KAAKoH,eAAiB,OAI1BK,QAAS,CACPC,eADO,WAEL,OAAO1H,KAAKsH,IAAMtH,KAAKsH,IAAItH,KAAKgH,UAAY,GAI9CE,mBANO,WAOLlH,KAAK2H,QAAQC,MAAM5H,KAAK/D,MAAO+D,KAAK2G,UAAW3G,KAAK0H,iBAAkB1H,KAAK+G,eAMpEc,EAAOlH,OAAIH,UAAU,oBAAqB,CACrDsH,OAAQ,CAACjB,GAETkB,MAAOvB,EAEPwB,OALqD,SAK7CC,GACN,OAAOA,EAAEjI,KAAKzE,IAAK,CACjB2M,KAAM,QACL,CAACD,EAAEjI,KAAKQ,UAAW,CACpBuH,MAAO/H,KAAK0G,cAMLyB,EAAOxH,OAAIH,UAAU,oBAAqB,CACrDsH,OAAQ,CAACjB,GAETkB,MAAOnB,EAEPoB,OALqD,SAK7CC,GACN,OAAOA,EAAEjI,KAAKzE,IAAK,CACjB8E,MAAO,CACL6H,KAAMlI,KAAK2G,YAEZ3G,KAAKoI,OAAOxC,YCnEbyC,EAAa,CACjBC,KAAM,cACNC,KAAM,eAEFC,EAAY,CAChBC,OAAQ,SACRC,OAAQ,UAGJC,EAAO,eAEPC,EAAcjI,OAAIH,UAAUmI,EAAM,CACtCZ,MAAO5C,EAEP3M,KAHsC,WAIpC,MAAO,CACL+J,MAAO,OAIXsG,MAAO,CACLrD,YADK,SACQsD,EAAUC,GACjBD,EAAS9P,SAAW+P,EAAS/P,SAC/BgH,KAAKgJ,QAAQC,YAAY,YAAajJ,KAAKkJ,8BAC3ClJ,KAAKgJ,QAAQxF,6BAKnBsD,QAlBsC,WAmBpC9G,KAAKmJ,aAAkC,eAAnBnJ,KAAKsC,UACzBtC,KAAKoJ,aAAepJ,KAAKmJ,aAAe,aAAe,YAEvDnJ,KAAKgJ,QAAU,IAAItH,EAAQ,CACzBuB,KAAMjD,KAAKiD,KACXa,eAAgB,EAChBuF,eAAgB,EAChB3G,MAAO1C,KAAK0C,MACZF,SAAUxC,KAAKwC,SACfqB,OAAQV,KAAKC,MAAMpD,KAAK0C,MAAQ,GAChC2B,UAAWrE,KAAKkJ,8BACflJ,KAAKsJ,gBAMRtJ,KAAKuC,MAAQvC,KAAKgJ,QAAQjE,WAG1B/E,KAAKuJ,IAAIlB,EAAWC,KAAMtI,KAAKwJ,gBAG3BxJ,KAAKoI,OAAOqB,QAAUzJ,KAAKoI,OAAOsB,SACpC1J,KAAKuJ,IAAIlB,EAAWE,KAAMvI,KAAK2J,gBAInCpC,cA/CsC,WAgDpCvH,KAAKgJ,QAAQY,WAGf3C,QAnDsC,WAqDhCjH,KAAK2C,MACP3C,KAAK6J,gBAAgB7J,KAAKgJ,QAAQc,UAAU9J,KAAK2C,QACxC3C,KAAKqC,QACdrC,KAAK6J,gBAAgB7J,KAAKqC,SAI9BoF,QAAS,CAEP+B,cAFO,SAEQxG,EAAIC,GACjBjD,KAAKgJ,QAAQe,SAAS/G,EAAIC,IAI5B0G,cAPO,SAOQ7N,EAAMmH,EAAM+G,GACrBlO,IAAS0M,EAAUC,OACrBzI,KAAKgJ,QAAQC,YAAY,iBAAkBhG,GAClCnH,IAAS0M,EAAUE,QAC5B1I,KAAKgJ,QAAQC,YAAY,iBAAkBhG,GAGzC+G,GACFhK,KAAKgJ,QAAQiB,wBAKjBX,eApBO,SAoBS/G,GACdvC,KAAKuC,MAAQA,GAGf2H,SAxBO,SAwBGC,GAAK,IACLC,EAASpK,KAAKqK,MAAdD,KACR,GAAKA,EAAL,CAIA,IAAM/H,EAAS+H,EAAKpK,KAAKoJ,cACzBpJ,KAAKgJ,QAAQsB,aAAajI,GAC1BrC,KAAKuK,UAAUlI,EAAQ8H,KAGzBjB,2BAnCO,WAmCuB,WAC5B,OAAOlJ,KAAKwF,YAAYgF,KAAI,SAACC,GAAD,OAAgBA,EAAW,EAAKnF,aAI9DuE,gBAxCO,SAwCUxH,GAAQ,IACf+H,EAASpK,KAAKqK,MAAdD,KACJA,IACFA,EAAKpK,KAAKoJ,cAAgB/G,GAAU,IAKxCkI,UAhDO,SAgDIlI,EAAQ8H,GAAK,IAEdC,EAASpK,KAAKqK,MAAdD,KACF7H,EAAQvC,KAAKgJ,QAAQjE,WACrB2F,EAAU1K,KAAKgJ,QAAQ0B,UACvBC,EAAU3K,KAAKgJ,QAAQ2B,UACvBC,EAAcR,EAAKpK,KAAKmJ,aAAe,cAAgB,gBACvD0B,EAAcT,EAAKpK,KAAKmJ,aAAe,cAAgB,gBAEzDwB,GAAa3K,KAAKwF,YAAYxM,QAAUqJ,EAASrC,KAAK+F,gBAAkB,EAC1E/F,KAAK4H,MAAM,QAASuC,EAAK5H,GAChBmI,GAAWrI,EAASuI,EAAc5K,KAAKgG,gBAAkB6E,EAClE7K,KAAK4H,MAAM,WAAYuC,EAAK5H,GAE5BvC,KAAK4H,MAAM,SAAUuC,EAAK5H,IAK9BuI,eAnEO,SAmES7C,GAKd,IAJA,IAAM8C,EAAQ,GACRpI,EAAQ3C,KAAKwC,SAAW,EAAIxC,KAAKuC,MAAMI,MACvCC,EAAM5C,KAAKwC,SAAWxC,KAAKwF,YAAYxM,OAAS,EAAIgH,KAAKuC,MAAMK,IAE5D4B,EAAQ7B,EAAO6B,GAAS5B,EAAK4B,IAAS,CAC7C,IAAMiG,EAAazK,KAAKwF,YAAYhB,GAChCiG,EACFM,EAAMzR,KAAK2O,EAAEJ,EAAM,CACjBmD,MAAOhL,KAAKkG,UACZ6B,MAAO,CACLxM,IAAKyE,KAAKiG,QACVhK,MAAOoM,EAAWC,KAClB7B,WAAYzG,KAAKmJ,aACjBxC,UAAW8D,EAAWzK,KAAKsF,SAC3BoB,OAAQ+D,EACRjK,UAAWR,KAAK0F,kBAIpBpG,QAAQ2L,KAAR,WAAiBtC,EAAjB,mCAAgDnE,EAAhD,wBAIJ,OAAOuG,IAMX/C,OA7JsC,SA6J9BC,GAAG,MACkBjI,KAAKoI,OAAxBqB,EADC,EACDA,OAAQC,EADP,EACOA,OACVwB,EAAUlL,KAAKmJ,aAAL,cACLnJ,KAAKuC,MAAMO,UADN,kBACyB9C,KAAKuC,MAAMM,SADpC,gBAET7C,KAAKuC,MAAMM,SAFF,kBAEoB7C,KAAKuC,MAAMO,UAF/B,MAIhB,OAAOmF,EAAEjI,KAAK2F,QAAS,CACrBwF,IAAK,OACLC,GAAI,CACF,UAAWpL,KAAKkK,WAEjB,CAEDT,EAASxB,EAAEE,EAAM,CACf6C,MAAOhL,KAAKoG,YACZ2B,MAAO,CACLxM,IAAKyE,KAAKmG,UACVlK,MAAOoM,EAAWE,KAClB5B,UAAW6B,EAAUC,SAEtBgB,GAAU,KAGbxB,EAAEjI,KAAK6F,QAAS,CACdmF,MAAOhL,KAAK8F,UACZzF,MAAO,CACL6H,KAAM,SAERmD,MAAO,CACLH,QAASA,IAEVlL,KAAK8K,eAAe7C,IAGvByB,EAASzB,EAAEE,EAAM,CACf6C,MAAOhL,KAAKsG,YACZyB,MAAO,CACLxM,IAAKyE,KAAKqG,UACVpK,MAAOoM,EAAWE,KAClB5B,UAAW6B,EAAUE,SAEtBgB,GAAU,UAKJd,IC/NX,EAAS,WAAa,IAAI7I,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,YAAY,eAAe6K,SAAS,CAAC,UAAYvL,EAAIwL,GAAGxL,EAAIyL,iBAClK,EAAkB,GCKtB,GACE7N,KAAM,eAENoK,MAAO,CACLyD,YAAa,CACX1P,KAAMyJ,UCX0U,ICQlV,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCnBX,EAAS,WAAa,IAAIxF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAUF,EAAIxD,KAAM4D,EAAG,MAAM,CAAC6K,MAAMjL,EAAIjE,KAAKwP,SAAS,CAAC,UAAYvL,EAAIwL,GAAGxL,EAAI0L,OAAO1L,EAAIxD,UAAUwD,EAAI2L,MAC5L,EAAkB,GCItB,G,oBAAA,CACE/N,KAAM,kBAENoK,MAAO,CACLjM,KAAM,CACJA,KAAMyJ,OACNoG,UAAU,GAEZpP,KAAM,CACJT,KAAMyJ,OACNoG,UAAU,IAId1E,QAdF,WAe+B,qBAAhBzH,OAAOoM,MAAwB5L,KAAKsH,IAAIuE,aACjDrM,OAAOoM,KAAKE,eAAe9L,KAAKsH,MAIpCG,QAAS,CACPgE,OADJ,SACA,GAOM,MANkB,SAAdzL,KAAKlE,OACPS,EAAOA,EAAKwP,QAAQ,KAAM,QAC1BxP,EAAOA,EAAKwP,QAAQ,KAAM,SAG5BxP,EAAOA,EAAKwP,QAAQ,KAAM,IACnBxP,MCjC0U,ICQnV,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCnBX,EAAS,WAAa,IAAIwD,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAASF,EAAIiM,SAAsyCjM,EAAI2L,KAAhyCvL,EAAG,IAAI,CAACM,YAAY,gBAAgBJ,MAAM,CAAC,KAAON,EAAIkM,IAAI,aAAa,0BAA0B,CAAC9L,EAAG,MAAM,CAAC+L,YAAY,CAAC,KAAO,UAAU,MAAQ,OAAO,SAAW,WAAW,IAAM,IAAI,OAAS,IAAI,MAAQ,IAAI,UAAU,QAAQ7L,MAAM,CAAC,MAAQN,EAAIkD,KAAK,OAASlD,EAAIkD,KAAK,QAAU,cAAc,cAAc,SAAS,CAAC9C,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,uDAAuDF,EAAG,OAAO,CAACM,YAAY,WAAWyL,YAAY,CAAC,mBAAmB,eAAe7L,MAAM,CAAC,EAAI,2LAA2L,KAAO,kBAAkBF,EAAG,OAAO,CAACM,YAAY,YAAYJ,MAAM,CAAC,EAAI,shBAAshB,KAAO,uBACl3C,EAAkB,G,wBCatB,GACE1C,KAAM,gBAENnF,KAHF,WAII,MAAO,CACLyT,IAAK,GACLhJ,KAAM,GACN+I,SAAN,SAIE/E,QAXF,WAYIjH,KAAKiM,IAAM,OAAf,OAAe,KC1BiU,KCQ5U,I,UAAY,eACd,GACA,EACA,GACA,EACA,KACA,WACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIlM,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACM,YAAY,OAAO,CAACN,EAAG,MAAM,CAACM,YAAY,gBAAgBuK,MAAM,CAACmB,OAAQpM,EAAIqM,QAAQhB,GAAG,CAAC,MAAQrL,EAAIsM,iBAAiB,CAACtM,EAAIO,GAAG,UAAUH,EAAG,MAAM,CAACM,YAAY,gBAAgBuK,MAAM,CAACmB,QAASpM,EAAIqM,QAAQhB,GAAG,CAAC,MAAQrL,EAAIuM,iBAAiB,CAACvM,EAAIO,GAAG,UAAUH,EAAG,IAAI,CAACoM,WAAW,CAAC,CAAC5O,KAAK,OAAO6O,QAAQ,SAAS9N,OAAQqB,EAAIqM,OAAQK,WAAW,YAAYhM,YAAY,oBAAoBJ,MAAM,CAAC,OAAS,SAAS,KAAON,EAAI2M,kBAAkB,CAAC3M,EAAIO,GAAG,sBAC9hB,GAAkB,G,aCYtB,IACE3C,KAAM,MAENnF,KAHF,WAII,MAAO,CACLkU,gBAAiB,GACjBP,OAAQ,GAAd,OAIEQ,SAAU,CACRP,OADJ,WAEM,OAAOpM,KAAKmM,SAAW,GAA7B,YAIElF,QAhBF,WAiBIjH,KAAK0M,gBAAkB,OAA3B,OAA2B,IAGzBjF,QAAS,CACP4E,eADJ,WAEMrM,KAAKmM,OAAS,GAApB,UACMnM,KAAKuK,aAGP+B,eANJ,WAOMtM,KAAKmM,OAAS,GAApB,UACMnM,KAAKuK,aAGPA,UAXJ,WAYMvK,KAAK4H,MAAM,aAAc5H,KAAKmM,WC7CyS,MCQzU,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,M,QCTfxL,OAAIH,UAAU,eAAgBoI,GAC9BjI,OAAIH,UAAUoM,EAAajP,KAAMiP,GACjCjM,OAAIH,UAAUqM,EAAclP,KAAMkP,GAClClM,OAAIH,UAAUsM,GAAOnP,KAAMmP,IAC3BnM,OAAIH,UAAUuM,GAAIpP,KAAMoP,IAExBpM,OAAIqM,OAAOC,UAAW,EACtBtM,OAAIqM,OAAOE,eAAgB,EAE3B,IAAIvM,OAAI,CACNM,SACA+G,OAAQ,SAAAC,GAAC,OAAIA,EAAEkF,MACdC,OAAO,S,oCCtBV,yBAA8iB,EAAG,G,6DCAjjB,yBAAuf,EAAG,G,8FCApfC,EAAKC,UAAUC,UACfC,IAAYH,EAAGI,MAAM,YACrBC,IAAQL,EAAGI,MAAM,qBACVzB,EAAWwB,GAAWE,G,yDCHnC,yBAA0jB,EAAG,G,kCCA7jB,sGAEO,IAAMC,EAAc,IAEdC,EAAW,CACtBC,KAAM,EACNC,KAAM,GAGKC,EAAcH,EAASC,M,yDCTpC,yBAA6iB,EAAG","file":"js/app.fd55a986.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\":\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\",\"dynamic-size\":\"dynamic-size\",\"fixed-size\":\"fixed-size\",\"horizontal\":\"horizontal\",\"infinite-loading\":\"infinite-loading\",\"keep-state\":\"keep-state\"}[chunkId]||chunkId) + \".\" + {\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\":\"3b940789\",\"dynamic-size\":\"af2b38a2\",\"fixed-size\":\"856b63cd\",\"horizontal\":\"a2686d86\",\"infinite-loading\":\"7ebcd00d\",\"keep-state\":\"587170ed\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"dynamic-size\":1,\"fixed-size\":1,\"horizontal\":1,\"infinite-loading\":1,\"keep-state\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\":\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\",\"dynamic-size\":\"dynamic-size\",\"fixed-size\":\"fixed-size\",\"horizontal\":\"horizontal\",\"infinite-loading\":\"infinite-loading\",\"keep-state\":\"keep-state\"}[chunkId]||chunkId) + \".\" + {\"dynamic-size~fixed-size~horizontal~infinite-loading~keep-state\":\"31d6cfe0\",\"dynamic-size\":\"05987921\",\"fixed-size\":\"50cd9045\",\"horizontal\":\"5a6cefd6\",\"infinite-loading\":\"e3344d42\",\"keep-state\":\"367cb4ef\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=style&index=0&id=13711752&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=style&index=0&id=13711752&lang=less&scoped=true&\"","export default () => {\n const hashValue = (location.hash || '').substr(2)\n if (hashValue) {\n return `https://github.com/tangbc/vue-virtual-scroll-list/tree/master/example/views/${hashValue}/Main.vue`\n } else {\n return `https://github.com/tangbc/vue-virtual-scroll-list`\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Corner.vue?vue&type=style&index=0&id=821512e4&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Corner.vue?vue&type=style&index=0&id=821512e4&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('div',{attrs:{\"id\":\"nav\"}},[_c('router-link',{attrs:{\"to\":\"/\"}},[_vm._v(\"home\")]),_c('router-link',{attrs:{\"to\":\"/fixed-size\"}},[_vm._v(\"fixed size\")]),_c('router-link',{attrs:{\"to\":\"/dynamic-size\"}},[_vm._v(\"dynamic size\")]),_c('router-link',{attrs:{\"to\":\"/horizontal\"}},[_vm._v(\"horizontal\")]),_c('router-link',{attrs:{\"to\":\"/infinite-loading\"}},[_vm._v(\"infinite loading\")]),_c('router-link',{attrs:{\"to\":\"/keep-state\"}},[_vm._v(\"keep state\")])],1),_c('router-view')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=55963a8a&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=less&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"index\"},[_c('github-corner'),_c('h2',{staticClass:\"name\"},[_vm._v(\"vue-virtual-scroll-list\")]),_vm._m(0),_c('h3',{staticClass:\"title\"},[_vm._v(\"What's news in v2.0\")]),_vm._m(1),_c('h3',{staticClass:\"title\"},[_vm._v(\"Todos\")]),_vm._m(2)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"head\"},[_c('img',{attrs:{\"src\":\"https://nodei.co/npm/vue-virtual-scroll-list.png?downloads=true&downloadRank=true&stars=true\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_c('li',[_vm._v(\"Support header slot, footer slot.\")]),_c('li',[_vm._v(\"Code structure is more reasonable and good maintainability.\")]),_c('li',[_vm._v(\"Abandoned v-for mode and variable mode, all condition unify into one mode.\")]),_c('li',[_vm._v(\"Don't have to care about each item size, in sometimes it's difficult to know that.\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_c('li',[_vm._v(\"Improve calculate offset efficient.\")]),_c('li',[_vm._v(\"Support page scroll, table layout.\")]),_c('li',[_vm._v(\"......\")])])}]\n\nexport { render, staticRenderFns }","\n \n
\n\n
vue-virtual-scroll-list \n\n
\n
\n
\n\n
What's news in v2.0 \n
\n Support header slot, footer slot. \n Code structure is more reasonable and good maintainability. \n Abandoned v-for mode and variable mode, all condition unify into one mode. \n Don't have to care about each item size, in sometimes it's difficult to know that. \n \n\n
Todos \n
\n Improve calculate offset efficient. \n Support page scroll, table layout. \n ...... \n \n
\n \n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Main.vue?vue&type=template&id=4ac967ef&scoped=true&\"\nimport script from \"./Main.vue?vue&type=script&lang=js&\"\nexport * from \"./Main.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Main.vue?vue&type=style&index=0&id=4ac967ef&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4ac967ef\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Index from '../views/index/Main.vue'\n\nVue.use(VueRouter)\n\n const routes = [\n {\n path: '/',\n name: 'Index',\n component: Index\n },\n {\n path: '/fixed-size',\n name: 'fixed-size',\n component: () => import(/* webpackChunkName: \"fixed-size\" */ '../views/fixed-size/Main.vue')\n },\n {\n path: '/dynamic-size',\n name: 'dynamic-size',\n component: () => import(/* webpackChunkName: \"dynamic-size\" */ '../views/dynamic-size/Main.vue')\n },\n {\n path: '/horizontal',\n name: 'horizontal',\n component: () => import(/* webpackChunkName: \"horizontal\" */ '../views/horizontal/Main.vue')\n },\n {\n path: '/infinite-loading',\n name: 'infinite-loading',\n component: () => import(/* webpackChunkName: \"infinite-loading\" */ '../views/infinite-loading/Main.vue')\n },\n {\n path: '/keep-state',\n name: 'keep-state',\n component: () => import(/* webpackChunkName: \"keep-state\" */ '../views/keep-state/Main.vue')\n }\n]\n\nconst router = new VueRouter({\n routes\n})\n\nexport default router\n","/**\n * virtual list core calculating center.\n */\n\nconst DIRECTION_TYPE = {\n FRONT: 'FRONT', // scroll up or left.\n BEHIND: 'BEHIND' // scroll down or right.\n}\nconst CALC_TYPE = {\n INIT: 'INIT',\n FIXED: 'FIXED',\n DYNAMIC: 'DYNAMIC'\n}\nconst LEADING_BUFFER = 1\n\nexport default class Virtual {\n constructor (param, updateHook) {\n this.init(param, updateHook)\n }\n\n init (param, updateHook) {\n // param data.\n this.param = param\n this.updateHook = updateHook\n\n // size data.\n this.sizes = new Map()\n this.firstRangeTotalSize = 0\n this.firstRangeAverageSize = 0\n this.lastCalcIndex = 0\n this.fixedSizeValue = 0\n this.calcType = CALC_TYPE.INIT\n\n // scroll data.\n this.offset = 0\n this.direction = ''\n\n // range data.\n this.range = Object.create(null)\n if (this.param && !this.param.disabled) {\n this.checkRange(0, param.keeps - 1)\n }\n\n // benchmark test data.\n // this.__bsearchCalls = 0\n // this.__getIndexOffsetCalls = 0\n }\n\n destroy () {\n this.init(null, null)\n }\n\n // return actually render range.\n getRange () {\n const range = Object.create(null)\n range.start = this.range.start\n range.end = this.range.end\n range.padFront = this.range.padFront\n range.padBehind = this.range.padBehind\n return range\n }\n\n isLower () {\n return this.direction === DIRECTION_TYPE.BEHIND\n }\n\n isUpper () {\n return this.direction === DIRECTION_TYPE.FRONT\n }\n\n // return start index offset.\n getOffset (start) {\n return this.getIndexOffset(start)\n }\n\n updateParam (key, value) {\n if (this.param && (key in this.param)) {\n this.param[key] = value\n }\n }\n\n // save each size map by id.\n saveSize (id, size) {\n this.sizes.set(id, size)\n\n // we assume size type is fixed at the beginning and remember first size value\n // if there is no size value different from this at next comming saving\n // we think it's a fixed size list, otherwise is dynamic size list.\n if (this.calcType === CALC_TYPE.INIT) {\n this.fixedSizeValue = size\n this.calcType = CALC_TYPE.FIXED\n } else if (this.calcType === CALC_TYPE.FIXED && this.fixedSizeValue !== size) {\n this.calcType = CALC_TYPE.DYNAMIC\n // it's no use at all.\n delete this.fixedSizeValue\n }\n\n // calculate the average size only in the first range.\n if (this.sizes.size <= this.param.keeps) {\n this.firstRangeTotalSize = this.firstRangeTotalSize + size\n this.firstRangeAverageSize = Math.round(this.firstRangeTotalSize / this.sizes.size)\n } else {\n // it's done using.\n delete this.firstRangeTotalSize\n }\n }\n\n // in some special situation (e.g. length change) we need to update in a row\n // try goiong to render next range by a leading buffer according to current direction.\n handleDataSourcesChange () {\n let start = this.range.start\n\n if (this.direction === DIRECTION_TYPE.FRONT) {\n start = start - LEADING_BUFFER\n } else if (this.direction === DIRECTION_TYPE.BEHIND) {\n start = start + LEADING_BUFFER\n }\n\n start = Math.max(start, 0)\n\n this.updateRange(start, this.getEndByStart(start))\n }\n\n // when slot size change, we also need force update.\n handleSlotSizeChange () {\n this.handleDataSourcesChange()\n }\n\n // calculating range on scroll.\n handleScroll (offset) {\n if (this.param.disabled) {\n return\n }\n\n this.direction = offset < this.offset ? DIRECTION_TYPE.FRONT : DIRECTION_TYPE.BEHIND\n this.offset = offset\n\n if (this.direction === DIRECTION_TYPE.FRONT) {\n this.handleFront()\n } else if (this.direction === DIRECTION_TYPE.BEHIND) {\n this.handleBehind()\n }\n }\n\n // ----------- public method end. -----------\n\n handleFront () {\n const overs = this.getScrollOvers()\n // should not change range if start doesn't exceed overs.\n if (overs > this.range.start) {\n return\n }\n\n // move up start by a buffer length, and make sure its safety.\n const start = Math.max(overs - this.param.buffer, 0)\n this.checkRange(start, this.getEndByStart(start))\n }\n\n handleBehind () {\n const overs = this.getScrollOvers()\n // range should not change if scroll overs within buffer.\n if (overs < this.range.start + this.param.buffer) {\n return\n }\n\n this.checkRange(overs, this.getEndByStart(overs))\n }\n\n // return the pass over numbers at current scroll offset.\n getScrollOvers () {\n // if slot header exist, we need subtract its size.\n const offset = this.offset - this.param.slotHeaderSize\n if (offset <= 0) {\n return 0\n }\n\n // if this list is fixed size, that can be easily.\n if (this.isFixedType()) {\n return Math.floor(offset / this.fixedSizeValue)\n }\n\n let low = 0\n let middle = 0\n let middleOffset = 0\n let high = this.param.uniqueIds.length\n\n while (low <= high) {\n // this.__bsearchCalls++\n middle = low + Math.floor((high - low) / 2)\n middleOffset = this.getIndexOffset(middle)\n\n if (middleOffset === offset) {\n return middle\n } else if (middleOffset < offset) {\n low = middle + 1\n } else if (middleOffset > offset) {\n high = middle - 1\n }\n }\n\n return low > 0 ? --low : 0\n }\n\n // return a scroll offset from given index, can efficiency be improved more here?\n // although the call frequency is very high, its only a superposition of numbers.\n getIndexOffset (givenIndex) {\n // we know this.\n if (!givenIndex) {\n return 0\n }\n\n let offset = 0\n let indexSize = 0\n for (let index = 0; index <= givenIndex; index++) {\n // this.__getIndexOffsetCalls++\n indexSize = this.sizes.get(this.param.uniqueIds[index])\n offset = offset + (indexSize || this.getEstimateSize())\n }\n\n // remember last calculate index.\n this.lastCalcIndex = Math.max(this.lastCalcIndex, givenIndex - 1)\n this.lastCalcIndex = Math.min(this.lastCalcIndex, this.getLastIndex())\n\n return offset\n }\n\n isFixedType () {\n return this.calcType === CALC_TYPE.FIXED\n }\n\n // return the real last index.\n getLastIndex () {\n return this.param.uniqueIds.length - 1\n }\n\n // in some conditions range will break, we need check and correct it\n // and then decide whether need update to next range.\n checkRange (start, end) {\n const keeps = this.param.keeps\n const total = this.param.uniqueIds.length\n\n // datas less than keeps, render all.\n if (total <= keeps) {\n start = 0\n end = this.getLastIndex()\n } else if (end - start < keeps - 1) {\n // if range length is less than keeps, corrent it base on end.\n start = end - keeps + 1\n }\n\n if (this.range.start !== start) {\n this.updateRange(start, end)\n }\n }\n\n // call updating to a new range and rerender.\n updateRange (start, end) {\n this.range.start = start\n this.range.end = end\n this.range.padFront = this.getPadFront()\n this.range.padBehind = this.getPadBehind()\n\n if (!this.param.disabled) {\n this.updateHook(this.getRange())\n }\n }\n\n // return end base on start when going to a new range.\n getEndByStart (start) {\n const theoryEnd = start + this.param.keeps - 1\n const truelyEnd = Math.min(theoryEnd, this.getLastIndex())\n return truelyEnd\n }\n\n // return total front offset.\n getPadFront () {\n if (this.isFixedType()) {\n return this.fixedSizeValue * this.range.start\n } else {\n return this.getIndexOffset(this.range.start)\n }\n }\n\n // return total behind offset.\n // for better performance, use estimated value if a not calculated.\n getPadBehind () {\n const end = this.range.end\n const lastIndex = this.getLastIndex()\n\n if (this.isFixedType()) {\n return (lastIndex - end) * this.fixedSizeValue\n }\n\n // if calculated all already, return the exactly offset.\n if (this.lastCalcIndex === lastIndex) {\n return this.getIndexOffset(lastIndex) - this.getIndexOffset(end)\n } else {\n // if not, return a estimate offset.\n return (lastIndex - end) * this.getEstimateSize()\n }\n }\n\n // get estimate size for one item, get from param.size at first range.\n getEstimateSize () {\n return this.firstRangeAverageSize || this.param.size\n }\n}\n","/**\n * props declaration for default, item and slot component.\n */\n\nexport const VirtualProps = {\n size: {\n type: Number\n },\n keeps: {\n type: Number,\n require: true\n },\n\n dataKey: {\n type: String,\n require: true\n },\n dataSources: {\n type: Array,\n require: true\n },\n dataComponent: {\n type: Object,\n require: true\n },\n\n rootTag: {\n type: String,\n default: 'div'\n },\n wrapTag: {\n type: String,\n default: 'div'\n },\n wrapClass: {\n type: String,\n default: ''\n },\n\n direction: {\n type: String,\n default: 'vertical' // the other value is horizontal.\n },\n upperThreshold: {\n type: Number,\n default: 0\n },\n lowerThreshold: {\n type: Number,\n default: 0\n },\n start: {\n type: Number,\n default: 0\n },\n offset: {\n type: Number,\n default: 0\n },\n\n itemTag: {\n type: String,\n default: 'div'\n },\n itemClass: {\n type: String,\n default: ''\n },\n\n headerTag: {\n type: String,\n default: 'div'\n },\n headerClass: {\n type: String,\n default: ''\n },\n footerTag: {\n type: String,\n default: 'div'\n },\n footerClass: {\n type: String,\n default: ''\n },\n\n disabled: {\n type: Boolean,\n default: false\n }\n}\n\nexport const ItemProps = {\n event: {\n type: String\n },\n tag: {\n type: String\n },\n horizontal: {\n type: Boolean\n },\n source: {\n type: Object\n },\n component: {\n type: Object\n },\n uniqueKey: {\n type: String\n }\n}\n\nexport const SlotProps = {\n event: {\n type: String\n },\n uniqueKey: {\n String\n },\n tag: {\n type: String\n },\n horizontal: {\n type: Boolean\n }\n}\n","/**\n * item and slot component both use similar wrapper\n * we need to know their size change at any time.\n */\n\nimport Vue from 'vue'\nimport { ItemProps, SlotProps } from './props'\n\nconst Wrapper = {\n created () {\n this.hasInitial = false\n this.shapeKey = this.horizontal ? 'offsetWidth' : 'offsetHeight'\n },\n\n mounted () {\n // dispatch once at initial.\n this.dispatchSizeChange()\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => {\n // dispatch when size changed.\n if (this.hasInitial) {\n this.dispatchSizeChange()\n } else {\n this.hasInitial = true\n }\n })\n this.resizeObserver.observe(this.$el)\n }\n },\n\n beforeDestroy () {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n }\n },\n\n methods: {\n getCurrentSize () {\n return this.$el ? this.$el[this.shapeKey] : 0\n },\n\n // tell parent current size identify by unqiue key.\n dispatchSizeChange () {\n this.$parent.$emit(this.event, this.uniqueKey, this.getCurrentSize(), this.hasInitial)\n }\n }\n}\n\n// wrapping for item.\nexport const Item = Vue.component('virtual-list-item', {\n mixins: [Wrapper],\n\n props: ItemProps,\n\n render (h) {\n return h(this.tag, {\n role: 'item'\n }, [h(this.component, {\n props: this.source\n })])\n }\n})\n\n// wrapping for slot.\nexport const Slot = Vue.component('virtual-list-slot', {\n mixins: [Wrapper],\n\n props: SlotProps,\n\n render (h) {\n return h(this.tag, {\n attrs: {\n role: this.uniqueKey\n }\n }, this.$slots.default)\n }\n})\n","/**\n * virtual list default component.\n */\n\nimport Vue from 'vue'\nimport Virtual from './virtual'\nimport { Item, Slot } from './item'\nimport { VirtualProps } from './props'\n\nconst EVENT_TYPE = {\n ITEM: 'item_resize',\n SLOT: 'slot_resize'\n}\nconst SLOT_TYPE = {\n HEADER: 'header', // string value also use for aria role attribute.\n FOOTER: 'footer'\n}\n\nconst NAME = 'virtual-list'\n\nconst VirtualList = Vue.component(NAME, {\n props: VirtualProps,\n\n data () {\n return {\n range: null\n }\n },\n\n watch: {\n dataSources (newValue, oldValue) {\n if (newValue.length !== oldValue.length) {\n this.virtual.updateParam('uniqueIds', this.getUniqueIdFromDataSources())\n this.virtual.handleDataSourcesChange()\n }\n }\n },\n\n created () {\n this.isHorizontal = this.direction === 'horizontal'\n this.directionKey = this.isHorizontal ? 'scrollLeft' : 'scrollTop'\n\n this.virtual = new Virtual({\n size: this.size, // also could be a estimate value.\n slotHeaderSize: 0,\n slotFooterSize: 0,\n keeps: this.keeps,\n disabled: this.disabled,\n buffer: Math.round(this.keeps / 3), // recommend for a third of keeps.\n uniqueIds: this.getUniqueIdFromDataSources()\n }, this.onRangeChanged)\n\n // just for debug\n // window.virtual = this.virtual\n\n // also need sync initial range first.\n this.range = this.virtual.getRange()\n\n // listen item size changing.\n this.$on(EVENT_TYPE.ITEM, this.onItemResized)\n\n // listen slot size changing.\n if (this.$slots.header || this.$slots.footer) {\n this.$on(EVENT_TYPE.SLOT, this.onSlotResized)\n }\n },\n\n beforeDestroy () {\n this.virtual.destroy()\n },\n\n mounted () {\n // set position.\n if (this.start) {\n this.setScrollOffset(this.virtual.getOffset(this.start))\n } else if (this.offset) {\n this.setScrollOffset(this.offset)\n }\n },\n\n methods: {\n // event called when every item mounted or size changed.\n onItemResized (id, size) {\n this.virtual.saveSize(id, size)\n },\n\n // event called when slot mounted or size changed.\n onSlotResized (type, size, hasInit) {\n if (type === SLOT_TYPE.HEADER) {\n this.virtual.updateParam('slotHeaderSize', size)\n } else if (type === SLOT_TYPE.FOOTER) {\n this.virtual.updateParam('slotFooterSize', size)\n }\n\n if (hasInit) {\n this.virtual.handleSlotSizeChange()\n }\n },\n\n // here is the rerendering entry.\n onRangeChanged (range) {\n this.range = range\n },\n\n onScroll (evt) {\n const { root } = this.$refs\n if (!root) {\n return\n }\n\n const offset = root[this.directionKey]\n this.virtual.handleScroll(offset)\n this.emitEvent(offset, evt)\n },\n\n getUniqueIdFromDataSources () {\n return this.dataSources.map((dataSource) => dataSource[this.dataKey])\n },\n\n // set current scroll position to a expectant offset.\n setScrollOffset (offset) {\n const { root } = this.$refs\n if (root) {\n root[this.directionKey] = offset || 0\n }\n },\n\n // emit event in special position.\n emitEvent (offset, evt) {\n // ref element is definitely available here.\n const { root } = this.$refs\n const range = this.virtual.getRange()\n const isLower = this.virtual.isLower()\n const isUpper = this.virtual.isUpper()\n const offsetShape = root[this.isHorizontal ? 'clientWidth' : 'clientHeight']\n const scrollShape = root[this.isHorizontal ? 'scrollWidth' : 'scrollHeight']\n\n if (isUpper && !!this.dataSources.length && offset - this.upperThreshold <= 0) {\n this.$emit('totop', evt, range)\n } else if (isLower && offset + offsetShape + this.lowerThreshold >= scrollShape) {\n this.$emit('tobottom', evt, range)\n } else {\n this.$emit('scroll', evt, range)\n }\n },\n\n // get the real render slots based on range data.\n getRenderSlots (h) {\n const slots = []\n const start = this.disabled ? 0 : this.range.start\n const end = this.disabled ? this.dataSources.length - 1 : this.range.end\n\n for (let index = start; index <= end; index++) {\n const dataSource = this.dataSources[index]\n if (dataSource) {\n slots.push(h(Item, {\n class: this.itemClass,\n props: {\n tag: this.itemTag,\n event: EVENT_TYPE.ITEM,\n horizontal: this.isHorizontal,\n uniqueKey: dataSource[this.dataKey],\n source: dataSource,\n component: this.dataComponent\n }\n }))\n } else {\n console.warn(`[${NAME}]: cannot get the index ${index} from data-sources.`)\n }\n }\n\n return slots\n }\n },\n\n // render function, a closer-to-the-compiler alternative to templates.\n // https://vuejs.org/v2/guide/render-function.html#The-Data-Object-In-Depth\n render (h) {\n const { header, footer } = this.$slots\n const padding = this.isHorizontal\n ? `0px ${this.range.padBehind}px 0px ${this.range.padFront}px`\n : `${this.range.padFront}px 0px ${this.range.padBehind}px`\n\n return h(this.rootTag, {\n ref: 'root',\n on: {\n '&scroll': this.onScroll\n }\n }, [\n // header slot.\n header ? h(Slot, {\n class: this.headerClass,\n props: {\n tag: this.headerTag,\n event: EVENT_TYPE.SLOT,\n uniqueKey: SLOT_TYPE.HEADER\n }\n }, header) : null,\n\n // main list.\n h(this.wrapTag, {\n class: this.wrapClass,\n attrs: {\n role: 'group'\n },\n style: {\n padding: padding\n }\n }, this.getRenderSlots(h)),\n\n // footer slot.\n footer ? h(Slot, {\n class: this.footerClass,\n props: {\n tag: this.footerTag,\n event: EVENT_TYPE.SLOT,\n uniqueKey: SLOT_TYPE.FOOTER\n }\n }, footer) : null\n ])\n }\n})\n\nexport default VirtualList\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"introduction\",domProps:{\"innerHTML\":_vm._s(_vm.description)}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Introduction.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Introduction.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Introduction.vue?vue&type=template&id=0c507b69&scoped=true&\"\nimport script from \"./Introduction.vue?vue&type=script&lang=js&\"\nexport * from \"./Introduction.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Introduction.vue?vue&type=style&index=0&id=0c507b69&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0c507b69\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!!_vm.code)?_c('pre',{class:_vm.type,domProps:{\"innerHTML\":_vm._s(_vm.encode(_vm.code))}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodeHighLight.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodeHighLight.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CodeHighLight.vue?vue&type=template&id=99fd125a&scoped=true&\"\nimport script from \"./CodeHighLight.vue?vue&type=script&lang=js&\"\nexport * from \"./CodeHighLight.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CodeHighLight.vue?vue&type=style&index=0&id=99fd125a&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"99fd125a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isMobile)?_c('a',{staticClass:\"github-corner\",attrs:{\"href\":_vm.url,\"aria-label\":\"View source on GitHub\"}},[_c('svg',{staticStyle:{\"fill\":\"#9b4dca\",\"color\":\"#fff\",\"position\":\"absolute\",\"top\":\"0\",\"border\":\"0\",\"right\":\"0\",\"z-index\":\"1000\"},attrs:{\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 250 250\",\"aria-hidden\":\"true\"}},[_c('path',{attrs:{\"d\":\"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z\"}}),_c('path',{staticClass:\"octo-arm\",staticStyle:{\"transform-origin\":\"130px 106px\"},attrs:{\"d\":\"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2\",\"fill\":\"currentColor\"}}),_c('path',{staticClass:\"octo-body\",attrs:{\"d\":\"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z\",\"fill\":\"currentColor\"}})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n \n \n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Corner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Corner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Corner.vue?vue&type=template&id=821512e4&scoped=true&\"\nimport script from \"./Corner.vue?vue&type=script&lang=js&\"\nexport * from \"./Corner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Corner.vue?vue&type=style&index=0&id=821512e4&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"821512e4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"tab\"},[_c('div',{staticClass:\"tab-item view\",class:{active: _vm.isView},on:{\"click\":_vm.eventClickView}},[_vm._v(\"VIEW\")]),_c('div',{staticClass:\"tab-item code\",class:{active: !_vm.isView},on:{\"click\":_vm.eventClickCode}},[_vm._v(\"CODE\")]),_c('a',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isView),expression:\"!isView\"}],staticClass:\"complete-code-url\",attrs:{\"target\":\"_blank\",\"href\":_vm.completeCodeUrl}},[_vm._v(\"COMPLETE CODE\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Tab.vue?vue&type=template&id=13711752&scoped=true&\"\nimport script from \"./Tab.vue?vue&type=script&lang=js&\"\nexport * from \"./Tab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Tab.vue?vue&type=style&index=0&id=13711752&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13711752\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\nimport router from './router'\n\nimport VirtualList from '../../src/index'\nimport Introduction from './components/Introduction'\nimport CodeHighLight from './components/CodeHighLight'\nimport Corner from './components/Corner'\nimport Tab from './components/Tab'\n\nVue.component('virtual-list', VirtualList)\nVue.component(Introduction.name, Introduction)\nVue.component(CodeHighLight.name, CodeHighLight)\nVue.component(Corner.name, Corner)\nVue.component(Tab.name, Tab)\n\nVue.config.devtools = false\nVue.config.productionTip = false\n\nnew Vue({\n router,\n render: h => h(App)\n}).$mount('#app')\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodeHighLight.vue?vue&type=style&index=0&id=99fd125a&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodeHighLight.vue?vue&type=style&index=0&id=99fd125a&lang=less&scoped=true&\"","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=less&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=less&\"","const ua = navigator.userAgent\nconst Android = !!ua.match(/Android/i)\nconst iOS = !!ua.match(/iPhone|iPad|iPod/i)\nexport const isMobile = Android || iOS\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=style&index=0&id=4ac967ef&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=style&index=0&id=4ac967ef&lang=less&scoped=true&\"","// config and constants.\n\nexport const TOTAL_COUNT = 10000\n\nexport const TAB_TYPE = {\n VIEW: 1,\n CODE: 2\n}\n\nexport const DEFAULT_TAB = TAB_TYPE.VIEW\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Introduction.vue?vue&type=style&index=0&id=0c507b69&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Introduction.vue?vue&type=style&index=0&id=0c507b69&lang=less&scoped=true&\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/example/src/views/Index/Main.vue b/example/src/views/Index/Main.vue
index b368b6f..3635539 100644
--- a/example/src/views/Index/Main.vue
+++ b/example/src/views/Index/Main.vue
@@ -19,7 +19,7 @@
Todos
Improve calculate offset efficient.
- Support page scroll, table layout.
+ Support page scroll, table layout, unit test.
......