UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

3 lines (2 loc) 2.95 kB
"use strict";const t=require("vue");require("../native-scroll/index.cjs");require("../resize-observer/index.cjs");const u=require("@vexip-ui/config"),p=require("@vexip-ui/hooks"),ee=require("./props.cjs"),y=require("../resize-observer/resize-observer.cjs"),b=require("../native-scroll/native-scroll.cjs"),te=t.defineComponent({name:"VirtualList",components:{NativeScroll:b,ResizeObserver:y},inheritAttrs:!1,props:ee.virtualListProps,emits:[],setup(T,{slots:s,attrs:v,expose:I}){const e=u.useProps("virtualList",T,{items:{default:()=>[],static:!0},itemSize:36,itemFixed:!1,idKey:"id",defaultKeyAt:null,bufferSize:5,listTag:"div",itemsTag:"ul",itemsAttrs:null,hideBar:!1,lockItems:!1,autoplay:!1,ignoreResize:!1,disabled:!1}),n=u.useNameHelper("virtual-list"),{items:k,itemSize:V,itemFixed:K,idKey:q,bufferSize:N}=t.toRefs(e),l=t.ref(),h=t.ref(),g=t.computed(()=>{var r;return(r=l.value)==null?void 0:r.content}),{indexMap:z,heightTree:A,scrollOffset:S,visibleItems:L,listStyle:w,itemsStyle:F,handleScroll:x,handleResize:O,handleItemResize:P,scrollTo:B,scrollBy:C,scrollToKey:E,scrollToIndex:M,ensureIndexInView:H,ensureKeyInView:j}=p.useVirtual({items:k,itemSize:V,itemFixed:K,idKey:q,bufferSize:N,wrapper:g,defaultKeyAt:e.defaultKeyAt,autoResize:!1});I({scroll:l,wrapper:g,list:h,indexMap:z,heightTree:A,scrollOffset:S,scrollTo:B,scrollBy:C,scrollToKey:E,scrollToIndex:M,ensureIndexInView:H,ensureKeyInView:j,refresh:c}),t.watch(()=>e.items.length,()=>{t.nextTick(c)});const D=t.computed(()=>[n.b(),e.inherit&&n.bm("inherit"),e.disabled&&n.bm("disabled"),v.class]);function G(r){x(),u.emitEvent(e.onScroll,r)}function J(r){e.ignoreResize||(O(r),u.emitEvent(e.onResize,r))}function Q(r,i){!e.lockItems&&!e.ignoreResize&&P(r,i)}async function c(){var r;await((r=l.value)==null?void 0:r.refresh()),x()}function U(r){const i=e.idKey,d=e.itemFixed,f=z.value,{class:a,style:W,...X}=e.itemsAttrs||{},Y=e.listTag||"div",Z=e.itemsTag||"ul";return t.createVNode(y,{onResize:c},{default:()=>[t.createVNode(Y,{ref:h,class:n.be("list"),style:w.value},{default:()=>[t.createVNode(Z,t.mergeProps(X,{class:[n.be("items"),a],style:[F.value,W]}),{default:()=>[s.default&&e.items.length?r.map(R=>{const o=R[i],_=f.get(o),m=t.renderSlot(s,"default",{item:R,index:_});if(d)return m.key=o,m;const $=Q.bind(null,o);return t.createVNode(y,{key:o,onResize:$},{default:()=>m})}):t.renderSlot(s,"empty")]})]})]})}return()=>{let r=L.value;return t.createVNode(b,t.mergeProps(v,{ref:l,class:D.value,inherit:e.inherit,"use-y-bar":!e.hideBar,"scroll-y":S.value,autoplay:e.autoplay,onScroll:G,onResize:J}),{default:()=>e.disabled?s.default&&e.items.length?e.items.map((i,d)=>{const f=i[e.idKey],a=t.renderSlot(s,"default",{item:i,index:d});return a.key=f,a}):t.renderSlot(s,"empty"):U(r),prefixTrap:p.createSlotRender(s,["prefix-trap","prefixTrap"]),suffixTrap:p.createSlotRender(s,["suffix-trap","suffixTrap"])})}}});module.exports=te; //# sourceMappingURL=virtual-list.cjs.map