物管理前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
6.3 KiB

  1. import{E as Q}from"./light-Cua7cqmF.js";import{V as D}from"./VResizeObserver-Tzd5ds8d.js";import{c as Z,a as V}from"./cssr-CS9sbUmO.js";import{u as ee}from"./use-memo-BgHp9YyU.js";import{d as Y,p as B}from"./index-C-nsH7mf.js";import{b as te}from"./Follower-DJGS5Fnl.js";import{d as C,v as ie,a0 as le,a1 as ne,c as R,s as I,G as y,m as se}from"./index-bVOhw2NF.js";function $(l){return l&-l}class oe{constructor(i,s){this.l=i,this.min=s;const a=new Array(i+1);for(let o=0;o<i+1;++o)a[o]=0;this.ft=a}add(i,s){if(s===0)return;const{l:a,ft:o}=this;for(i+=1;i<=a;)o[i]+=s,i+=$(i)}get(i){return this.sum(i+1)-this.sum(i)}sum(i){if(i===void 0&&(i=this.l),i<=0)return 0;const{ft:s,min:a,l:o}=this;if(i>o)throw new Error("[FinweckTree.sum]: `i` is larger than length.");let r=i*a;for(;i>0;)r+=s[i],i-=$(i);return r}getBound(i){let s=0,a=this.l;for(;a>s;){const o=Math.floor((s+a)/2),r=this.sum(o);if(r>i){a=o;continue}else if(r<i){if(s===o)return this.sum(s+1)<=i?s+1:o;s=o}else return o}return s}}let M;function re(){return typeof document>"u"?!1:(M===void 0&&("matchMedia"in window?M=window.matchMedia("(pointer:coarse)").matches:M=!1),M)}let W;function X(){return typeof document>"u"?1:(W===void 0&&(W="chrome"in window?window.devicePixelRatio:1),W)}const ue=V(".v-vl",{maxHeight:"inherit",height:"100%",overflow:"auto",minWidth:"1px"},[V("&:not(.v-vl--show-scrollbar)",{scrollbarWidth:"none"},[V("&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb",{width:0,height:0,display:"none"})])]),ge=C({name:"VirtualList",inheritAttrs:!1,props:{showScrollbar:{type:Boolean,default:!0},items:{type:Array,default:()=>[]},itemSize:{type:Number,required:!0},itemResizable:Boolean,itemsStyle:[String,Object],visibleItemsTag:{type:[String,Object],default:"div"},visibleItemsProps:Object,ignoreItemResize:Boolean,onScroll:Function,onWheel:Function,onResize:Function,defaultScrollKey:[Number,String],defaultScrollIndex:Number,keyField:{type:String,default:"key"},paddingTop:{type:[Number,String],default:0},paddingBottom:{type:[Number,String],default:0}},setup(l){const i=Q();ue.mount({id:"vueuc/virtual-list",head:!0,anchorMetaName:Z,ssr:i}),ie(()=>{const{defaultScrollIndex:e,defaultScrollKey:t}=l;e!=null?z({index:e}):t!=null&&z({key:t})});let s=!1,a=!1;le(()=>{if(s=!1,!a){a=!0;return}z({top:E.value,left:x})}),ne(()=>{s=!0,a||(a=!0)});const o=R(()=>{const e=new Map,{keyField:t}=l;return l.items.forEach((n,c)=>{e.set(n[t],c)}),e}),r=I(null),g=I(void 0),m=new Map,b=R(()=>{const{items:e,itemSize:t,keyField:n}=l,c=new oe(e.length,t);return e.forEach((f,d)=>{const u=f[n],h=m.get(u);h!==void 0&&c.add(d,h)}),c}),p=I(0);let x=0;const E=I(0),_=ee(()=>Math.max(b.value.getBound(E.value-Y(l.paddingTop))-1,0)),G=R(()=>{const{value:e}=g;if(e===void 0)return[];const{items:t,itemSize:n}=l,c=_.value,f=Math.min(c+Math.ceil(e/n+1),t.length-1),d=[];for(let u=c;u<=f;++u)d.push(t[u]);return d}),z=(e,t)=>{if(typeof e=="number"){F(e,t,"auto");return}const{left:n,top:c,index:f,key:d,position:u,behavior:h,debounce:v=!0}=e;if(n!==void 0||c!==void 0)F(n,c,h);else if(f!==void 0)O(f,h,v);else if(d!==void 0){const N=o.value.get(d);N!==void 0&&O(N,h,v)}else u==="bottom"?F(0,Number.MAX_SAFE_INTEGER,h):u==="top"&&F(0,0,h)};let S,k=null;function O(e,t,n){const{value:c}=b,f=c.sum(e)+Y(l.paddingTop);if(!n)r.value.scrollTo({left:0,top:f,behavior:t});else{S=e,k!==null&&window.clearTimeout(k),k=window.setTimeout(()=>{S=void 0,k=null},16);const{scrollTop:d,offsetHeight:u}=r.value;if(f>d){const h=c.get(e);f+h<=d+u||r.value.scrollTo({left:0,top:f+h-u,behavior:t})}else r.value.scrollTo({left:0,top:f,behavior:t})}}function F(e,t,n){r.value.scrollTo({left:e,top:t,behavior:n})}function K(e,t){var n,c,f;if(s||l.ignoreItemResize||j(t.target))return;const{value:d}=b,u=o.value.get(e),h=d.get(u),v=(f=(c=(n=t.borderBoxSize)===null||n===void 0?void 0:n[0])===null||c===void 0?void 0:c.blockSize)!==null&&f!==void 0?f:t.contentRect.height;if(v===h)return;v-l.itemSize===0?m.delete(e):m.set(e,v-l.itemSize);const T=v-h;if(T===0)return;d.add(u,T);const w=r.value;if(w!=null){if(S===void 0){const A=d.sum(u