@tanstack/solid-virtual
Version:
Headless UI for virtualizing scrollable elements in Solid
71 lines (70 loc) • 2.63 kB
JavaScript
;
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