react-layout-virtual 0.0.4 → 0.0.5
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/ReactLayoutVirtual.d.ts +3 -8
- package/dist/ReactRenderer.d.ts +17 -13
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -6
- package/package.json +2 -2
|
@@ -3,16 +3,11 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author Alexandr Kalabin
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
7
|
-
export interface ListItemProps<T = unknown> {
|
|
8
|
-
data: T;
|
|
9
|
-
ref: React.Ref<HTMLDivElement> | undefined;
|
|
10
|
-
index: number;
|
|
11
|
-
}
|
|
6
|
+
import { type ListItemProps } from './ReactRenderer';
|
|
12
7
|
export interface VirtualizedListReactProps<T> {
|
|
13
|
-
scrollerRef?: React.RefObject<
|
|
8
|
+
scrollerRef?: React.RefObject<HTMLElement>;
|
|
14
9
|
overscanHeight?: number;
|
|
15
10
|
data: T[];
|
|
16
11
|
renderItem: (props: ListItemProps<T>) => React.ReactNode;
|
|
17
12
|
}
|
|
18
|
-
export default function VirtualizedListReact<
|
|
13
|
+
export default function VirtualizedListReact<ItemData = unknown>(props: VirtualizedListReactProps<ItemData>): import("react/jsx-runtime").JSX.Element;
|
package/dist/ReactRenderer.d.ts
CHANGED
|
@@ -3,34 +3,38 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author Alexandr Kalabin
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import type { IRangeRenderer, ScrollDirection,
|
|
6
|
+
import { BaseRenderer } from 'layout-virtual';
|
|
7
|
+
import type { IRangeRenderer, ScrollDirection, VirtualScrollStructure } from "layout-virtual/types";
|
|
8
|
+
export interface ListItemProps<T = unknown> {
|
|
9
|
+
data: T;
|
|
10
|
+
ref: React.Ref<HTMLDivElement> | undefined;
|
|
11
|
+
index: number;
|
|
12
|
+
}
|
|
13
|
+
export type ItemRenderer<T> = React.FC<ListItemProps<T>>;
|
|
8
14
|
type ReactRendererOptions = {
|
|
9
15
|
itemsSetter: React.Dispatch<React.SetStateAction<React.ReactNode[]>>;
|
|
10
16
|
} & VirtualScrollStructure;
|
|
11
17
|
interface IReactRenderer {
|
|
12
18
|
commit: () => void;
|
|
13
19
|
}
|
|
14
|
-
export default class ReactRenderer implements IRangeRenderer, IReactRenderer {
|
|
20
|
+
export default class ReactRenderer<DataType = unknown> extends BaseRenderer implements IRangeRenderer<DataType, ItemRenderer<DataType>>, IReactRenderer {
|
|
15
21
|
private _store;
|
|
16
|
-
private
|
|
17
|
-
private _renderedIndexRegistry;
|
|
18
|
-
private _renderedItemsRegistry;
|
|
22
|
+
private _renderItem;
|
|
19
23
|
private _itemsSetter;
|
|
20
24
|
private _renderedRangeRefPool;
|
|
21
25
|
private _listItems;
|
|
22
26
|
private _flushItems;
|
|
23
|
-
private _getRenderedBoundaryIndex;
|
|
24
27
|
constructor(opts: ReactRendererOptions);
|
|
25
|
-
render(startIndex: number, endIndex: number, direction: ScrollDirection): number;
|
|
26
28
|
renderRange(startIndex: number, endIndex: number, direction: ScrollDirection): void;
|
|
27
|
-
removeRange(startIndex: number, endIndex: number, direction
|
|
29
|
+
removeRange(startIndex: number, endIndex: number, direction?: ScrollDirection): {
|
|
30
|
+
itemsToRemove: Element[];
|
|
31
|
+
removedHeight: number;
|
|
32
|
+
};
|
|
28
33
|
clear(): void;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
get scrollableContainer(): ScrollableContainer;
|
|
32
|
-
attach(store: IItemStore<IItem>): void;
|
|
34
|
+
setData(store: DataType[]): void;
|
|
35
|
+
setRenderItem(renderItem: ItemRenderer<DataType>): void;
|
|
33
36
|
flush(): Promise<void>;
|
|
34
37
|
commit(): void;
|
|
38
|
+
get dataSize(): number;
|
|
35
39
|
}
|
|
36
40
|
export {};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{useRef as n,useState as
|
|
2
|
-
/* @__PURE__ */e("div",{ref:
|
|
3
|
-
/* @__PURE__ */e("div",{ref:
|
|
4
|
-
/* @__PURE__ */e("div",{ref:
|
|
5
|
-
/* @__PURE__ */e("div",{ref:
|
|
6
|
-
/* @__PURE__ */e("div",{ref:
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{useRef as n,useState as i,useLayoutEffect as s,useEffect as o}from"react";import{flushSync as l,createPortal as c}from"react-dom";import{BaseRenderer as h,DynamicListLayout as a,LayoutVirtual as d}from"layout-virtual";class u extends h{t=[];i=null;o;l=/* @__PURE__ */new Map;h=[];u=()=>{this.o(this.h)};constructor(e){super(e),this.o=e.itemsSetter}renderRange(t,r,n){const i=this.t,s=this.h,o=[],l=this.l;for(let c=t;c<=r;c++){const t=i[c];if(t){const r=this.i;if(r){const n=l.get(c)||{current:null,idx:c};l.set(c,n),o.push(/* @__PURE__ */e(r,{data:t,ref:n,index:c},c))}}}this.h="down"===n?s.concat(o):"up"===n?o.concat(s):this.h}removeRange(e,t,r){const n=super.removeRange(e,t),i=n.itemsToRemove.length;return i&&(this.h="down"===r?this.h.slice(i):"up"===r?this.h.slice(0,-i):this.h),n}clear(){super.clear(),this.h=[],this.o(this.h)}setData(e){this.t=e}setRenderItem(e){this.i=e}flush(){return l(this.u),Promise.resolve()}commit(){const e=this.l;for(const t of e.values()){const{idx:e,current:r}=t;r&&this.registerElement(e,r)}e.clear()}get dataSize(){return this.t.length}}function f(l){const{overscanHeight:h=200,data:f,renderItem:m,scrollerRef:p}=l,v=n(null),g=n(null),w=n(null),x=n(null),R=n(null),_=n(null),I=n(null),[S,y]=i([]),H=n(void 0);s(()=>{H.current=new u({container:p?.current||v.current,scrollHeightFiller:g.current,viewportContainer:w.current,scrollCanvas:x.current,topSpacer:R.current,contentLayer:_.current,bottomSpacer:I.current,itemsSetter:y});const e=new a({overscanHeight:h,renderer:H.current}),t=new d({layout:e});t.setData(f),t.setRenderItem(m)},[]),o(()=>{H.current?.commit()},[S]);const C=/* @__PURE__ */t(r,{children:[
|
|
2
|
+
/* @__PURE__ */e("div",{ref:g}),
|
|
3
|
+
/* @__PURE__ */e("div",{ref:w,children:/* @__PURE__ */t("div",{ref:x,children:[
|
|
4
|
+
/* @__PURE__ */e("div",{ref:R}),
|
|
5
|
+
/* @__PURE__ */e("div",{ref:_,children:S}),
|
|
6
|
+
/* @__PURE__ */e("div",{ref:I})]})})]});return p&&p.current?c(C,p.current):/* @__PURE__ */e("div",{ref:v,children:C})}export{f as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-layout-virtual",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "React virtual scrolling component for responsive lists and grids with dynamic item sizes.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"virtual",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"prepublishOnly": "npm run build"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"layout-virtual": "^0.0
|
|
46
|
+
"layout-virtual": "^0.1.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"react": "^19.2.5",
|