vue-layout-virtual 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/VueRenderer.d.ts +12 -19
- package/dist/index.js +1 -1
- package/package.json +4 -3
package/dist/VueRenderer.d.ts
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author Alexandr Kalabin
|
|
5
5
|
*/
|
|
6
|
-
import { type Ref
|
|
7
|
-
import {
|
|
8
|
-
import type {
|
|
6
|
+
import { type Ref } from 'vue';
|
|
7
|
+
import { BaseRenderer } from 'layout-virtual';
|
|
8
|
+
import type { IRangeRenderer, ScrollDirection, VirtualScrollStructure } from 'layout-virtual/types';
|
|
9
9
|
export interface ListItemProps<T = unknown> {
|
|
10
10
|
data: T;
|
|
11
11
|
index: number;
|
|
@@ -13,32 +13,25 @@ export interface ListItemProps<T = unknown> {
|
|
|
13
13
|
type VueRendererOptions<T> = {
|
|
14
14
|
itemsSetter: (items: ListItemProps<T>[]) => void;
|
|
15
15
|
} & VirtualScrollStructure;
|
|
16
|
-
export type VueListItem<T = unknown> = {
|
|
17
|
-
data: T;
|
|
18
|
-
render: (props: ListItemProps<T>) => VNodeChild;
|
|
19
|
-
};
|
|
20
16
|
export type IndexedRef = {
|
|
21
17
|
value: Element | null;
|
|
22
18
|
idx: number;
|
|
23
19
|
};
|
|
24
|
-
export default class VueRenderer<
|
|
20
|
+
export default class VueRenderer<DataType = unknown> extends BaseRenderer implements IRangeRenderer<DataType> {
|
|
25
21
|
private _store;
|
|
26
|
-
private _scrollableContainer;
|
|
27
|
-
private _renderedIndexRegistry;
|
|
28
|
-
private _renderedItemsRegistry;
|
|
29
22
|
private _itemsSetter;
|
|
30
23
|
private _listItems;
|
|
31
|
-
|
|
32
|
-
constructor(opts: VueRendererOptions<T>);
|
|
33
|
-
render(startIndex: number, endIndex: number, direction: ScrollDirection): number;
|
|
24
|
+
constructor(opts: VueRendererOptions<DataType>);
|
|
34
25
|
renderRange(startIndex: number, endIndex: number, direction: ScrollDirection): void;
|
|
35
|
-
removeRange(startIndex: number, endIndex: number, direction
|
|
26
|
+
removeRange(startIndex: number, endIndex: number, direction?: ScrollDirection): {
|
|
27
|
+
itemsToRemove: Element[];
|
|
28
|
+
removedHeight: number;
|
|
29
|
+
};
|
|
36
30
|
clear(): void;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
get scrollableContainer(): ScrollableContainer;
|
|
40
|
-
attach(store: IItemStore<IItem<T>>): void;
|
|
31
|
+
setData(store: DataType[]): void;
|
|
32
|
+
setRenderItem(): void;
|
|
41
33
|
flush(): Promise<void>;
|
|
42
34
|
commit(renderedRefs: Map<number, Ref<HTMLElement | undefined>>): void;
|
|
35
|
+
get dataSize(): number;
|
|
43
36
|
}
|
|
44
37
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{nextTick as e,defineComponent as
|
|
1
|
+
import{nextTick as e,defineComponent as r,ref as t,onMounted as o,onUpdated as n,unref as s,openBlock as i,createBlock as f,Teleport as l,createElementVNode as a,createElementBlock as c,Fragment as d,renderList as u,renderSlot as v}from"vue";import{BaseRenderer as h,DynamicListLayout as p,LayoutVirtual as y}from"layout-virtual";class _ extends h{t=[];o;i=[];constructor(e){super(e),this.o=e.itemsSetter}renderRange(e,r,t){const o=this.t,n=this.i,s=[];for(let i=e;i<=r;i++){const e=o[i];e&&s.push({data:e,index:i})}this.i="down"===t?n.concat(s):"up"===t?s.concat(n):this.i}removeRange(e,r,t){const o=super.removeRange(e,r),n=o.itemsToRemove.length;return n&&(this.i="down"===t?this.i.slice(n):"up"===t?this.i.slice(0,-n):this.i),o}clear(){super.clear(),this.i=[],this.o(this.i)}setData(e){this.t=e}setRenderItem(){}flush(){return this.o(this.i),e()}commit(e){for(const[r,{value:t}]of e.entries())t&&this.registerElement(r,t);e.clear()}get dataSize(){return this.t.length}}const R=/* @__PURE__ */r({l:"VueLayoutVirtual",props:{scrollerRef:{},overscanHeight:{},data:{}},setup(e){const r=e,{overscanHeight:h=200,data:R,scrollerRef:m}=r,k=m||t(),g=t(),w=t(),S=t(),C=t(),H=t(),x=t(),I=t(),b=/* @__PURE__ */new Map;let L;const F=e=>{console.log("setVisibleItems:",e),I.value=e},V=e=>b.get(e)||b.set(e,t()).get(e);return o(()=>{L=new _({container:k.value,scrollHeightFiller:g.value,viewportContainer:w.value,scrollCanvas:S.value,topSpacer:C.value,contentLayer:H.value,bottomSpacer:x.value,itemsSetter:F});const e=new p({overscanHeight:h,renderer:L});new y({layout:e}).setData(R)}),n(()=>{L?.commit(b)}),(e,r)=>s(m)?(i(),f(l,{key:0,to:"scrollerRef"},[a("div",{ref_key:"scrollHeightFillerRef",ref:g},null,512),a("div",{ref_key:"viewportContainerRef",ref:w},[a("div",{ref_key:"scrollCanvasRef",ref:S},[a("div",{ref_key:"topSpacerRef",ref:C},null,512),a("div",{ref_key:"contentLayerRef",ref:H},[(i(!0),c(d,null,u(I.value,r=>v(e.$slots,"renderItem",{key:r.index,data:r.data,index:r.index,ref_for:!0,ref:V(r.index)})),128))],512),a("div",{ref_key:"bottomSpacerRef",ref:x},null,512)],512)],512)])):(i(),c("div",{key:1,ref_key:"containerRef",ref:k},[a("div",{ref_key:"scrollHeightFillerRef",ref:g},null,512),a("div",{ref_key:"viewportContainerRef",ref:w},[a("div",{ref_key:"scrollCanvasRef",ref:S},[a("div",{ref_key:"topSpacerRef",ref:C},null,512),a("div",{ref_key:"contentLayerRef",ref:H},[(i(!0),c(d,null,u(I.value,r=>v(e.$slots,"renderItem",{key:r.index,data:r.data,index:r.index,ref_for:!0,ref:V(r.index)})),128))],512),a("div",{ref_key:"bottomSpacerRef",ref:x},null,512)],512)],512)],512))}});export{R as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-layout-virtual",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Vue virtual scrolling component for responsive lists and grids with dynamic item sizes.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"virtual",
|
|
@@ -39,10 +39,11 @@
|
|
|
39
39
|
"test": "test",
|
|
40
40
|
"build": "npm run build:bundle && npm run build:types",
|
|
41
41
|
"build:bundle": "vite build",
|
|
42
|
-
"build:types": "tsc -p tsconfig.build.json --emitDeclarationOnly"
|
|
42
|
+
"build:types": "tsc -p tsconfig.build.json --emitDeclarationOnly",
|
|
43
|
+
"prepublishOnly": "npm run build"
|
|
43
44
|
},
|
|
44
45
|
"dependencies": {
|
|
45
|
-
"layout-virtual": "^0.0
|
|
46
|
+
"layout-virtual": "^0.1.0"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
|
48
49
|
"vue": "^3.5.34"
|