@tanstack/solid-virtual
Version:
Headless UI for virtualizing scrollable elements in Solid
1 lines • 5.75 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../src/index.tsx"],"sourcesContent":["import {\n Virtualizer,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll,\n} from '@tanstack/virtual-core'\n\nimport {\n createComputed,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n} from 'solid-js'\nimport { createStore, reconcile } from 'solid-js/store'\nimport type { PartialKeys, VirtualizerOptions } from '@tanstack/virtual-core'\n\nexport * from '@tanstack/virtual-core'\n\nfunction createVirtualizerBase<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n>(\n options: VirtualizerOptions<TScrollElement, TItemElement>,\n): Virtualizer<TScrollElement, TItemElement> {\n const resolvedOptions: VirtualizerOptions<TScrollElement, TItemElement> =\n mergeProps(options)\n\n const instance = new Virtualizer<TScrollElement, TItemElement>(\n resolvedOptions,\n )\n\n const [virtualItems, setVirtualItems] = createStore(\n instance.getVirtualItems(),\n )\n const [totalSize, setTotalSize] = createSignal(instance.getTotalSize())\n\n const handler = {\n get(\n target: Virtualizer<TScrollElement, TItemElement>,\n prop: keyof Virtualizer<TScrollElement, TItemElement>,\n ) {\n switch (prop) {\n case 'getVirtualItems':\n return () => virtualItems\n case 'getTotalSize':\n return () => totalSize()\n default:\n return Reflect.get(target, prop)\n }\n },\n }\n\n const virtualizer = new Proxy(instance, handler)\n virtualizer.setOptions(resolvedOptions)\n\n onMount(() => {\n const cleanup = virtualizer._didMount()\n virtualizer._willUpdate()\n onCleanup(cleanup)\n })\n\n createComputed(() => {\n virtualizer.setOptions(\n mergeProps(resolvedOptions, options, {\n onChange: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n sync: boolean,\n ) => {\n instance._willUpdate()\n setVirtualItems(\n reconcile(instance.getVirtualItems(), {\n key: 'index',\n }),\n )\n setTotalSize(instance.getTotalSize())\n options.onChange?.(instance, sync)\n },\n }),\n )\n virtualizer.measure()\n })\n\n return virtualizer\n}\n\nexport function createVirtualizer<\n TScrollElement extends Element,\n TItemElement extends Element,\n>(\n options: PartialKeys<\n VirtualizerOptions<TScrollElement, TItemElement>,\n 'observeElementRect' | 'observeElementOffset' | 'scrollToFn'\n >,\n): Virtualizer<TScrollElement, TItemElement> {\n return createVirtualizerBase<TScrollElement, TItemElement>(\n mergeProps(\n {\n observeElementRect: observeElementRect,\n observeElementOffset: observeElementOffset,\n scrollToFn: elementScroll,\n },\n options,\n ),\n )\n}\n\nexport function createWindowVirtualizer<TItemElement extends Element>(\n options: PartialKeys<\n VirtualizerOptions<Window, TItemElement>,\n | 'getScrollElement'\n | 'observeElementRect'\n | 'observeElementOffset'\n | 'scrollToFn'\n >,\n): Virtualizer<Window, TItemElement> {\n return createVirtualizerBase<Window, TItemElement>(\n mergeProps(\n {\n getScrollElement: () =>\n typeof document !== 'undefined' ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () =>\n typeof document !== 'undefined' ? window.scrollY : 0,\n },\n options,\n ),\n )\n}\n"],"names":["createVirtualizerBase","options","resolvedOptions","mergeProps","instance","Virtualizer","virtualItems","setVirtualItems","createStore","getVirtualItems","totalSize","setTotalSize","createSignal","getTotalSize","handler","get","target","prop","Reflect","virtualizer","Proxy","setOptions","onMount","cleanup","_didMount","_willUpdate","onCleanup","createComputed","onChange","sync","reconcile","key","measure","createVirtualizer","observeElementRect","observeElementOffset","scrollToFn","elementScroll","createWindowVirtualizer","getScrollElement","document","window","observeWindowRect","observeWindowOffset","windowScroll","initialOffset","scrollY"],"mappings":";;;;;AAsBA,SAASA,sBAIPC,SAC2C;AACrCC,QAAAA,kBACJC,mBAAWF,OAAO;AAEdG,QAAAA,WAAW,IAAIC,YAAAA,YACnBH,eACF;AAEA,QAAM,CAACI,cAAcC,eAAe,IAAIC,MAAAA,YACtCJ,SAASK,iBACX;AACA,QAAM,CAACC,WAAWC,YAAY,IAAIC,QAAAA,aAAaR,SAASS,cAAc;AAEtE,QAAMC,UAAU;AAAA,IACdC,IACEC,QACAC,MACA;AACA,cAAQA,MAAI;AAAA,QACV,KAAK;AACH,iBAAO,MAAMX;AAAAA,QACf,KAAK;AACH,iBAAO,MAAMI,UAAU;AAAA,QACzB;AACSQ,iBAAAA,QAAQH,IAAIC,QAAQC,IAAI;AAAA,MAAA;AAAA,IACnC;AAAA,EAEJ;AAEA,QAAME,cAAc,IAAIC,MAAMhB,UAAUU,OAAO;AAC/CK,cAAYE,WAAWnB,eAAe;AAEtCoB,UAAAA,QAAQ,MAAM;AACNC,UAAAA,UAAUJ,YAAYK,UAAU;AACtCL,gBAAYM,YAAY;AACxBC,YAAAA,UAAUH,OAAO;AAAA,EAAA,CAClB;AAEDI,UAAAA,eAAe,MAAM;AACPN,gBAAAA,WACVlB,mBAAWD,iBAAiBD,SAAS;AAAA,MACnC2B,UAAUA,CACRxB,WACAyB,SACG;;AACHzB,kBAASqB,YAAY;AAEnBK,wBAAAA,MAAAA,UAAU1B,UAASK,mBAAmB;AAAA,UACpCsB,KAAK;AAAA,QAAA,CACN,CACH;AACa3B,qBAAAA,UAASS,cAAc;AAC5Be,sBAAAA,aAAAA,iCAAWxB,WAAUyB;AAAAA,MAAI;AAAA,IACnC,CACD,CACH;AACAV,gBAAYa,QAAQ;AAAA,EAAA,CACrB;AAEMb,SAAAA;AACT;AAEO,SAASc,kBAIdhC,SAI2C;AAC3C,SAAOD,sBACLG,QAAAA,WACE;AAAA,IAAA,oBACE+B,YAAAA;AAAAA,IAAAA,sBACAC,YAAAA;AAAAA,IACAC,YAAYC,YAAAA;AAAAA,EACd,GACApC,OACF,CACF;AACF;AAEO,SAASqC,wBACdrC,SAOmC;AACnC,SAAOD,sBACLG,QAAAA,WACE;AAAA,IACEoC,kBAAkBA,MAChB,OAAOC,aAAa,cAAcC,SAAS;AAAA,IAC7CP,oBAAoBQ,YAAAA;AAAAA,IACpBP,sBAAsBQ,YAAAA;AAAAA,IACtBP,YAAYQ,YAAAA;AAAAA,IACZC,eAAeA,MACb,OAAOL,aAAa,cAAcC,OAAOK,UAAU;AAAA,EACvD,GACA7C,OACF,CACF;AACF;;;;;;;;;"}