UNPKG

@tanstack/solid-virtual

Version:

Headless UI for virtualizing scrollable elements in Solid

71 lines (70 loc) 2.63 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const virtualCore = require("@tanstack/virtual-core"); const solidJs = require("solid-js"); const store = require("solid-js/store"); function createVirtualizerBase(options) { const resolvedOptions = solidJs.mergeProps(options); const instance = new virtualCore.Virtualizer(resolvedOptions); const [virtualItems, setVirtualItems] = store.createStore(instance.getVirtualItems()); const [totalSize, setTotalSize] = solidJs.createSignal(instance.getTotalSize()); const handler = { get(target, prop) { switch (prop) { case "getVirtualItems": return () => virtualItems; case "getTotalSize": return () => totalSize(); default: return Reflect.get(target, prop); } } }; const virtualizer = new Proxy(instance, handler); virtualizer.setOptions(resolvedOptions); solidJs.onMount(() => { const cleanup = virtualizer._didMount(); virtualizer._willUpdate(); solidJs.onCleanup(cleanup); }); solidJs.createComputed(() => { virtualizer.setOptions(solidJs.mergeProps(resolvedOptions, options, { onChange: (instance2, sync) => { var _a; instance2._willUpdate(); setVirtualItems(store.reconcile(instance2.getVirtualItems(), { key: "index" })); setTotalSize(instance2.getTotalSize()); (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync); } })); virtualizer.measure(); }); return virtualizer; } function createVirtualizer(options) { return createVirtualizerBase(solidJs.mergeProps({ observeElementRect: virtualCore.observeElementRect, observeElementOffset: virtualCore.observeElementOffset, scrollToFn: virtualCore.elementScroll }, options)); } function createWindowVirtualizer(options) { return createVirtualizerBase(solidJs.mergeProps({ getScrollElement: () => typeof document !== "undefined" ? window : null, observeElementRect: virtualCore.observeWindowRect, observeElementOffset: virtualCore.observeWindowOffset, scrollToFn: virtualCore.windowScroll, initialOffset: () => typeof document !== "undefined" ? window.scrollY : 0 }, options)); } exports.createVirtualizer = createVirtualizer; exports.createWindowVirtualizer = createWindowVirtualizer; Object.keys(virtualCore).forEach((k) => { if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, { enumerable: true, get: () => virtualCore[k] }); }); //# sourceMappingURL=index.cjs.map