UNPKG

@tanstack/solid-virtual

Version:

Headless UI for virtualizing scrollable elements in Solid

1 lines 5.76 kB
{"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;AAC3C,QAAMC,kBACJC,QAAAA,WAAWF,OAAO;AAEpB,QAAMG,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,MAAAA;AAAAA,QACN,KAAK;AACH,iBAAO,MAAMX;AAAAA,QACf,KAAK;AACH,iBAAO,MAAMI,UAAAA;AAAAA,QACf;AACE,iBAAOQ,QAAQH,IAAIC,QAAQC,IAAI;AAAA,MAAA;AAAA,IAErC;AAAA,EAAA;AAGF,QAAME,cAAc,IAAIC,MAAMhB,UAAUU,OAAO;AAC/CK,cAAYE,WAAWnB,eAAe;AAEtCoB,UAAAA,QAAQ,MAAM;AACZ,UAAMC,UAAUJ,YAAYK,UAAAA;AAC5BL,gBAAYM,YAAAA;AACZC,YAAAA,UAAUH,OAAO;AAAA,EACnB,CAAC;AAEDI,UAAAA,eAAe,MAAM;AACnBR,gBAAYE,WACVlB,mBAAWD,iBAAiBD,SAAS;AAAA,MACnC2B,UAAUA,CACRxB,WACAyB,SACG;;AACHzB,kBAASqB,YAAAA;AACTlB,wBACEuB,MAAAA,UAAU1B,UAASK,mBAAmB;AAAA,UACpCsB,KAAK;AAAA,QAAA,CACN,CACH;AACApB,qBAAaP,UAASS,cAAc;AACpCZ,sBAAQ2B,aAAR3B,iCAAmBG,WAAUyB;AAAAA,MAC/B;AAAA,IAAA,CACD,CACH;AACAV,gBAAYa,QAAAA;AAAAA,EACd,CAAC;AAED,SAAOb;AACT;AAEO,SAASc,kBAIdhC,SAI2C;AAC3C,SAAOD,sBACLG,QAAAA,WACE;AAAA,IAAA,oBACE+B,YAAAA;AAAAA,IAAAA,sBACAC,YAAAA;AAAAA,IACAC,YAAYC,YAAAA;AAAAA,EAAAA,GAEdpC,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,EAAA,GAEvD7C,OACF,CACF;AACF;;;;;;;;;"}