{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import {\n Virtualizer,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll,\n} from '@tanstack/virtual-core'\nimport {\n computed,\n onScopeDispose,\n shallowRef,\n triggerRef,\n unref,\n watch,\n} from 'vue'\nimport type { PartialKeys, VirtualizerOptions } from '@tanstack/virtual-core'\nimport type { Ref } from 'vue'\n\nexport * from '@tanstack/virtual-core'\n\ntype MaybeRef = T | Ref\n\nfunction useVirtualizerBase<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n>(\n options: MaybeRef>,\n): Ref> {\n const virtualizer = new Virtualizer(unref(options))\n const state = shallowRef(virtualizer)\n\n const cleanup = virtualizer._didMount()\n\n watch(\n () => unref(options).getScrollElement(),\n (el) => {\n if (el) {\n virtualizer._willUpdate()\n }\n },\n {\n immediate: true,\n },\n )\n\n watch(\n () => unref(options),\n (options) => {\n virtualizer.setOptions({\n ...options,\n onChange: (instance, sync) => {\n triggerRef(state)\n options.onChange?.(instance, sync)\n },\n })\n\n virtualizer._willUpdate()\n triggerRef(state)\n },\n {\n immediate: true,\n },\n )\n\n onScopeDispose(cleanup)\n\n return state\n}\n\nexport function useVirtualizer<\n TScrollElement extends Element,\n TItemElement extends Element,\n>(\n options: MaybeRef<\n PartialKeys<\n VirtualizerOptions,\n 'observeElementRect' | 'observeElementOffset' | 'scrollToFn'\n >\n >,\n): Ref> {\n return useVirtualizerBase(\n computed(() => ({\n observeElementRect: observeElementRect,\n observeElementOffset: observeElementOffset,\n scrollToFn: elementScroll,\n ...unref(options),\n })),\n )\n}\n\nexport function useWindowVirtualizer(\n options: MaybeRef<\n PartialKeys<\n VirtualizerOptions,\n | 'observeElementRect'\n | 'observeElementOffset'\n | 'scrollToFn'\n | 'getScrollElement'\n >\n >,\n): Ref> {\n return useVirtualizerBase(\n computed(() => ({\n getScrollElement: () => (typeof document !== 'undefined' ? window : null),\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () =>\n typeof document !== 'undefined' ? window.scrollY : 0,\n ...unref(options),\n })),\n )\n}\n"],"names":["options"],"mappings":";;;AAwBA,SAAS,mBAIP,SACgD;AAChD,QAAM,cAAc,IAAI,YAAY,MAAM,OAAO,CAAC;AAC5C,QAAA,QAAQ,WAAW,WAAW;AAE9B,QAAA,UAAU,YAAY,UAAU;AAEtC;AAAA,IACE,MAAM,MAAM,OAAO,EAAE,iBAAiB;AAAA,IACtC,CAAC,OAAO;AACN,UAAI,IAAI;AACN,oBAAY,YAAY;AAAA,MAAA;AAAA,IAE5B;AAAA,IACA;AAAA,MACE,WAAW;AAAA,IAAA;AAAA,EAEf;AAEA;AAAA,IACE,MAAM,MAAM,OAAO;AAAA,IACnB,CAACA,aAAY;AACX,kBAAY,WAAW;AAAA,QACrB,GAAGA;AAAAA,QACH,UAAU,CAAC,UAAU,SAAS;;AAC5B,qBAAW,KAAK;AAChBA,yBAAQ,aAARA,kCAAmB,UAAU;AAAA,QAAI;AAAA,MACnC,CACD;AAED,kBAAY,YAAY;AACxB,iBAAW,KAAK;AAAA,IAClB;AAAA,IACA;AAAA,MACE,WAAW;AAAA,IAAA;AAAA,EAEf;AAEA,iBAAe,OAAO;AAEf,SAAA;AACT;AAEO,SAAS,eAId,SAMgD;AACzC,SAAA;AAAA,IACL,SAAS,OAAO;AAAA,MACd;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,GAAG,MAAM,OAAO;AAAA,IAAA,EAChB;AAAA,EACJ;AACF;AAEO,SAAS,qBACd,SASwC;AACjC,SAAA;AAAA,IACL,SAAS,OAAO;AAAA,MACd,kBAAkB,MAAO,OAAO,aAAa,cAAc,SAAS;AAAA,MACpE,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB,YAAY;AAAA,MACZ,eAAe,MACb,OAAO,aAAa,cAAc,OAAO,UAAU;AAAA,MACrD,GAAG,MAAM,OAAO;AAAA,IAAA,EAChB;AAAA,EACJ;AACF;"}