{"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;;;;;;;;;"}