@skygraph/react 0.0.0-placeholder.0 → 0.5.0
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/LICENSE +21 -0
- package/README.md +70 -12
- package/dist/Table-BmesoMje.d.ts +1017 -0
- package/dist/Table-CpKMOH2x.d.cts +1017 -0
- package/dist/chunk-2OCEO636.js +91 -0
- package/dist/chunk-2OCEO636.js.map +1 -0
- package/dist/chunk-BNMJSYI2.js +54 -0
- package/dist/chunk-BNMJSYI2.js.map +1 -0
- package/dist/chunk-FSV73JI4.js +58 -0
- package/dist/chunk-FSV73JI4.js.map +1 -0
- package/dist/chunk-GJDDPZH7.js +226 -0
- package/dist/chunk-GJDDPZH7.js.map +1 -0
- package/dist/chunk-MLEBVELO.js +1412 -0
- package/dist/chunk-MLEBVELO.js.map +1 -0
- package/dist/chunk-NXB3VAVF.js +3794 -0
- package/dist/chunk-NXB3VAVF.js.map +1 -0
- package/dist/chunk-SEQI65CF.js +61 -0
- package/dist/chunk-SEQI65CF.js.map +1 -0
- package/dist/chunk-UO6VJC3C.js +1667 -0
- package/dist/chunk-UO6VJC3C.js.map +1 -0
- package/dist/chunk-Z5UGF7EO.js +847 -0
- package/dist/chunk-Z5UGF7EO.js.map +1 -0
- package/dist/chunk-ZJF6SJLP.js +200 -0
- package/dist/chunk-ZJF6SJLP.js.map +1 -0
- package/dist/common-CdpocIEz.d.cts +27 -0
- package/dist/common-CdpocIEz.d.ts +27 -0
- package/dist/datagrid-B6hg5yJh.d.cts +200 -0
- package/dist/datagrid-B6hg5yJh.d.ts +200 -0
- package/dist/datagrid.cjs +1053 -0
- package/dist/datagrid.cjs.map +1 -0
- package/dist/datagrid.d.cts +2 -0
- package/dist/datagrid.d.ts +2 -0
- package/dist/datagrid.js +10 -0
- package/dist/datagrid.js.map +1 -0
- package/dist/devtools.cjs +253 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.cts +29 -0
- package/dist/devtools.d.ts +29 -0
- package/dist/devtools.js +9 -0
- package/dist/devtools.js.map +1 -0
- package/dist/form.cjs +1723 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.d.cts +530 -0
- package/dist/form.d.ts +530 -0
- package/dist/form.js +49 -0
- package/dist/form.js.map +1 -0
- package/dist/index.cjs +22467 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3685 -0
- package/dist/index.d.ts +3685 -0
- package/dist/index.js +14131 -0
- package/dist/index.js.map +1 -0
- package/dist/table.cjs +4134 -0
- package/dist/table.cjs.map +1 -0
- package/dist/table.d.cts +31 -0
- package/dist/table.d.ts +31 -0
- package/dist/table.js +26 -0
- package/dist/table.js.map +1 -0
- package/dist/tree.cjs +1822 -0
- package/dist/tree.cjs.map +1 -0
- package/dist/tree.d.cts +348 -0
- package/dist/tree.d.ts +348 -0
- package/dist/tree.js +13 -0
- package/dist/tree.js.map +1 -0
- package/dist/virtual.cjs +145 -0
- package/dist/virtual.cjs.map +1 -0
- package/dist/virtual.d.cts +50 -0
- package/dist/virtual.d.ts +50 -0
- package/dist/virtual.js +11 -0
- package/dist/virtual.js.map +1 -0
- package/package.json +108 -18
- package/index.js +0 -3
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// src/hooks/useVirtualScroll.ts
|
|
2
|
+
import { useState, useCallback, useRef, useEffect, useMemo } from "react";
|
|
3
|
+
import { createVirtual } from "@skygraph/core";
|
|
4
|
+
function useVirtualScroll(options) {
|
|
5
|
+
const containerRef = useRef(null);
|
|
6
|
+
const engineRef = useRef(null);
|
|
7
|
+
if (!engineRef.current) {
|
|
8
|
+
engineRef.current = createVirtual({
|
|
9
|
+
itemCount: options.itemCount,
|
|
10
|
+
itemHeight: options.itemHeight,
|
|
11
|
+
overscan: options.overscan
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const engine = engineRef.current;
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
engine.setItemCount(options.itemCount);
|
|
17
|
+
}, [engine, options.itemCount]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
engine.setItemHeight(options.itemHeight);
|
|
20
|
+
}, [engine, options.itemHeight]);
|
|
21
|
+
const [range, setRange] = useState(
|
|
22
|
+
() => engine.getRange(0, 0)
|
|
23
|
+
);
|
|
24
|
+
const recalc = useCallback(() => {
|
|
25
|
+
const el = containerRef.current;
|
|
26
|
+
if (!el) return;
|
|
27
|
+
setRange(engine.getRange(el.scrollTop, el.clientHeight));
|
|
28
|
+
}, [engine]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
const el = containerRef.current;
|
|
31
|
+
if (!el) return;
|
|
32
|
+
recalc();
|
|
33
|
+
el.addEventListener("scroll", recalc, { passive: true });
|
|
34
|
+
const ro = new ResizeObserver(recalc);
|
|
35
|
+
ro.observe(el);
|
|
36
|
+
return () => {
|
|
37
|
+
el.removeEventListener("scroll", recalc);
|
|
38
|
+
ro.disconnect();
|
|
39
|
+
};
|
|
40
|
+
}, [recalc]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
recalc();
|
|
43
|
+
}, [options.itemCount, recalc]);
|
|
44
|
+
const scrollToIndex = useCallback(
|
|
45
|
+
(index, align = "start") => {
|
|
46
|
+
const el = containerRef.current;
|
|
47
|
+
if (!el) return;
|
|
48
|
+
el.scrollTop = engine.scrollToIndex(index, el.clientHeight, align);
|
|
49
|
+
},
|
|
50
|
+
[engine]
|
|
51
|
+
);
|
|
52
|
+
return useMemo(
|
|
53
|
+
() => ({ range, containerRef, scrollToIndex, engine }),
|
|
54
|
+
[range, scrollToIndex, engine]
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export {
|
|
59
|
+
useVirtualScroll
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=chunk-SEQI65CF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useVirtualScroll.ts"],"sourcesContent":["import { useState, useCallback, useRef, useEffect, useMemo } from 'react'\nimport { createVirtual } from '@skygraph/core'\nimport type { VirtualEngine, VirtualRange } from '@skygraph/core'\n\nexport interface UseVirtualScrollOptions {\n itemCount: number\n itemHeight: number | ((index: number) => number)\n overscan?: number\n}\n\nexport interface UseVirtualScrollReturn {\n range: VirtualRange\n containerRef: React.RefObject<HTMLElement | null>\n scrollToIndex: (index: number, align?: 'start' | 'center' | 'end') => void\n engine: VirtualEngine\n}\n\nexport function useVirtualScroll(options: UseVirtualScrollOptions): UseVirtualScrollReturn {\n const containerRef = useRef<HTMLElement | null>(null)\n const engineRef = useRef<VirtualEngine | null>(null)\n\n if (!engineRef.current) {\n engineRef.current = createVirtual({\n itemCount: options.itemCount,\n itemHeight: options.itemHeight,\n overscan: options.overscan,\n })\n }\n\n const engine = engineRef.current\n\n useEffect(() => {\n engine.setItemCount(options.itemCount)\n }, [engine, options.itemCount])\n\n useEffect(() => {\n engine.setItemHeight(options.itemHeight)\n }, [engine, options.itemHeight])\n\n const [range, setRange] = useState<VirtualRange>(() =>\n engine.getRange(0, 0),\n )\n\n const recalc = useCallback(() => {\n const el = containerRef.current\n if (!el) return\n setRange(engine.getRange(el.scrollTop, el.clientHeight))\n }, [engine])\n\n useEffect(() => {\n const el = containerRef.current\n if (!el) return\n\n recalc()\n\n el.addEventListener('scroll', recalc, { passive: true })\n const ro = new ResizeObserver(recalc)\n ro.observe(el)\n\n return () => {\n el.removeEventListener('scroll', recalc)\n ro.disconnect()\n }\n }, [recalc])\n\n useEffect(() => {\n recalc()\n }, [options.itemCount, recalc])\n\n const scrollToIndex = useCallback(\n (index: number, align: 'start' | 'center' | 'end' = 'start') => {\n const el = containerRef.current\n if (!el) return\n el.scrollTop = engine.scrollToIndex(index, el.clientHeight, align)\n },\n [engine],\n )\n\n return useMemo(\n () => ({ range, containerRef, scrollToIndex, engine }),\n [range, scrollToIndex, engine],\n )\n}\n"],"mappings":";AAAA,SAAS,UAAU,aAAa,QAAQ,WAAW,eAAe;AAClE,SAAS,qBAAqB;AAgBvB,SAAS,iBAAiB,SAA0D;AACzF,QAAM,eAAe,OAA2B,IAAI;AACpD,QAAM,YAAY,OAA6B,IAAI;AAEnD,MAAI,CAAC,UAAU,SAAS;AACtB,cAAU,UAAU,cAAc;AAAA,MAChC,WAAW,QAAQ;AAAA,MACnB,YAAY,QAAQ;AAAA,MACpB,UAAU,QAAQ;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,UAAU;AAEzB,YAAU,MAAM;AACd,WAAO,aAAa,QAAQ,SAAS;AAAA,EACvC,GAAG,CAAC,QAAQ,QAAQ,SAAS,CAAC;AAE9B,YAAU,MAAM;AACd,WAAO,cAAc,QAAQ,UAAU;AAAA,EACzC,GAAG,CAAC,QAAQ,QAAQ,UAAU,CAAC;AAE/B,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IAAuB,MAC/C,OAAO,SAAS,GAAG,CAAC;AAAA,EACtB;AAEA,QAAM,SAAS,YAAY,MAAM;AAC/B,UAAM,KAAK,aAAa;AACxB,QAAI,CAAC,GAAI;AACT,aAAS,OAAO,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAAA,EACzD,GAAG,CAAC,MAAM,CAAC;AAEX,YAAU,MAAM;AACd,UAAM,KAAK,aAAa;AACxB,QAAI,CAAC,GAAI;AAET,WAAO;AAEP,OAAG,iBAAiB,UAAU,QAAQ,EAAE,SAAS,KAAK,CAAC;AACvD,UAAM,KAAK,IAAI,eAAe,MAAM;AACpC,OAAG,QAAQ,EAAE;AAEb,WAAO,MAAM;AACX,SAAG,oBAAoB,UAAU,MAAM;AACvC,SAAG,WAAW;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,YAAU,MAAM;AACd,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,WAAW,MAAM,CAAC;AAE9B,QAAM,gBAAgB;AAAA,IACpB,CAAC,OAAe,QAAoC,YAAY;AAC9D,YAAM,KAAK,aAAa;AACxB,UAAI,CAAC,GAAI;AACT,SAAG,YAAY,OAAO,cAAc,OAAO,GAAG,cAAc,KAAK;AAAA,IACnE;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,SAAO;AAAA,IACL,OAAO,EAAE,OAAO,cAAc,eAAe,OAAO;AAAA,IACpD,CAAC,OAAO,eAAe,MAAM;AAAA,EAC/B;AACF;","names":[]}
|