@tanstack/angular-virtual 3.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/build/esm2022/index.mjs +77 -0
- package/build/esm2022/proxy.mjs +91 -0
- package/build/esm2022/tanstack-angular-virtual.mjs +5 -0
- package/build/esm2022/types.mjs +2 -0
- package/build/fesm2022/tanstack-angular-virtual.mjs +172 -0
- package/build/fesm2022/tanstack-angular-virtual.mjs.map +1 -0
- package/package.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021-present Tanner Linsley
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { elementScroll, observeElementOffset, observeElementRect, observeWindowOffset, observeWindowRect, Virtualizer, windowScroll, } from '@tanstack/virtual-core';
|
|
2
|
+
export * from '@tanstack/virtual-core';
|
|
3
|
+
export * from './types';
|
|
4
|
+
import { signal, inject, DestroyRef, computed, effect, afterNextRender, untracked, AfterRenderPhase, } from '@angular/core';
|
|
5
|
+
import { proxyVirtualizer } from './proxy';
|
|
6
|
+
function createVirtualizerBase(options) {
|
|
7
|
+
let virtualizer;
|
|
8
|
+
function lazyInit() {
|
|
9
|
+
virtualizer ??= new Virtualizer(options());
|
|
10
|
+
return virtualizer;
|
|
11
|
+
}
|
|
12
|
+
const virtualizerSignal = signal(virtualizer, { equal: () => false });
|
|
13
|
+
// two-way sync options
|
|
14
|
+
effect(() => {
|
|
15
|
+
const _options = options();
|
|
16
|
+
lazyInit();
|
|
17
|
+
virtualizerSignal.set(virtualizer);
|
|
18
|
+
virtualizer.setOptions({
|
|
19
|
+
..._options,
|
|
20
|
+
onChange: (instance, sync) => {
|
|
21
|
+
// update virtualizerSignal so that dependent computeds recompute.
|
|
22
|
+
virtualizerSignal.set(instance);
|
|
23
|
+
_options.onChange?.(instance, sync);
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
// update virtualizerSignal so that dependent computeds recompute.
|
|
27
|
+
virtualizerSignal.set(virtualizer);
|
|
28
|
+
}, { allowSignalWrites: true });
|
|
29
|
+
const scrollElement = computed(() => options().getScrollElement());
|
|
30
|
+
// let the virtualizer know when the scroll element is changed
|
|
31
|
+
effect(() => {
|
|
32
|
+
const el = scrollElement();
|
|
33
|
+
if (el) {
|
|
34
|
+
untracked(virtualizerSignal)._willUpdate();
|
|
35
|
+
}
|
|
36
|
+
}, { allowSignalWrites: true });
|
|
37
|
+
let cleanup;
|
|
38
|
+
afterNextRender(() => (virtualizer ?? lazyInit())._didMount(), {
|
|
39
|
+
phase: AfterRenderPhase.Read,
|
|
40
|
+
});
|
|
41
|
+
inject(DestroyRef).onDestroy(() => cleanup?.());
|
|
42
|
+
return proxyVirtualizer(virtualizerSignal, lazyInit);
|
|
43
|
+
}
|
|
44
|
+
export function injectVirtualizer(options) {
|
|
45
|
+
const resolvedOptions = computed(() => {
|
|
46
|
+
return {
|
|
47
|
+
observeElementRect: observeElementRect,
|
|
48
|
+
observeElementOffset: observeElementOffset,
|
|
49
|
+
scrollToFn: elementScroll,
|
|
50
|
+
getScrollElement: () => {
|
|
51
|
+
const elementOrRef = options().scrollElement;
|
|
52
|
+
return ((isElementRef(elementOrRef)
|
|
53
|
+
? elementOrRef.nativeElement
|
|
54
|
+
: elementOrRef) ?? null);
|
|
55
|
+
},
|
|
56
|
+
...options(),
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
return createVirtualizerBase(resolvedOptions);
|
|
60
|
+
}
|
|
61
|
+
function isElementRef(elementOrRef) {
|
|
62
|
+
return elementOrRef != null && 'nativeElement' in elementOrRef;
|
|
63
|
+
}
|
|
64
|
+
export function injectWindowVirtualizer(options) {
|
|
65
|
+
const resolvedOptions = computed(() => {
|
|
66
|
+
return {
|
|
67
|
+
getScrollElement: () => (typeof document !== 'undefined' ? window : null),
|
|
68
|
+
observeElementRect: observeWindowRect,
|
|
69
|
+
observeElementOffset: observeWindowOffset,
|
|
70
|
+
scrollToFn: windowScroll,
|
|
71
|
+
initialOffset: () => typeof document !== 'undefined' ? window.scrollY : 0,
|
|
72
|
+
...options(),
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
return createVirtualizerBase(resolvedOptions);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFFakIsV0FBVyxFQUVYLFlBQVksR0FDYixNQUFNLHdCQUF3QixDQUFBO0FBQy9CLGNBQWMsd0JBQXdCLENBQUE7QUFDdEMsY0FBYyxTQUFTLENBQUE7QUFFdkIsT0FBTyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFFUixNQUFNLEVBRU4sZUFBZSxFQUNmLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUE7QUFFdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRTFDLFNBQVMscUJBQXFCLENBSTVCLE9BQWlFO0lBRWpFLElBQUksV0FBc0QsQ0FBQTtJQUMxRCxTQUFTLFFBQVE7UUFDZixXQUFXLEtBQUssSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUMxQyxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsV0FBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFFdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sQ0FDSixHQUFHLEVBQUU7UUFDSCxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsQ0FBQTtRQUMxQixRQUFRLEVBQUUsQ0FBQTtRQUNWLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNsQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ3JCLEdBQUcsUUFBUTtZQUNYLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDM0Isa0VBQWtFO2dC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LENBQUE7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGVsZW1lbnRTY3JvbGwsXG4gIG9ic2VydmVFbGVtZW50T2Zmc2V0LFxuICBvYnNlcnZlRWxlbWVudFJlY3QsXG4gIG9ic2VydmVXaW5kb3dPZmZzZXQsXG4gIG9ic2VydmVXaW5kb3dSZWN0LFxuICBQYXJ0aWFsS2V5cyxcbiAgVmlydHVhbGl6ZXIsXG4gIFZpcnR1YWxpemVyT3B0aW9ucyxcbiAgd2luZG93U2Nyb2xsLFxufSBmcm9tICdAdGFuc3RhY2svdmlydHVhbC1jb3JlJ1xuZXhwb3J0ICogZnJvbSAnQHRhbnN0YWNrL3ZpcnR1YWwtY29yZSdcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCB7XG4gIHNpZ25hbCxcbiAgaW5qZWN0LFxuICBEZXN0cm95UmVmLFxuICBjb21wdXRlZCxcbiAgU2lnbmFsLFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgdW50cmFja2VkLFxuICBBZnRlclJlbmRlclBoYXNlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQW5ndWxhclZpcnR1YWxpemVyIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IHByb3h5VmlydHVhbGl6ZXIgfSBmcm9tICcuL3Byb3h5J1xuXG5mdW5jdGlvbiBjcmVhdGVWaXJ0dWFsaXplckJhc2U8XG4gIFRTY3JvbGxFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB8IFdpbmRvdyxcbiAgVEl0ZW1FbGVtZW50IGV4dGVuZHMgRWxlbWVudCxcbj4oXG4gIG9wdGlvbnM6IFNpZ25hbDxWaXJ0dWFsaXplck9wdGlvbnM8VFNjcm9sbEVsZW1lbnQsIFRJdGVtRWxlbWVudD4+LFxuKTogQW5ndWxhclZpcnR1YWxpemVyPFRTY3JvbGxFbGVtZW50LCBUSXRlbUVsZW1lbnQ+IHtcbiAgbGV0IHZpcnR1YWxpemVyOiBWaXJ0dWFsaXplcjxUU2Nyb2xsRWxlbWVudCwgVEl0ZW1FbGVtZW50PlxuICBmdW5jdGlvbiBsYXp5SW5pdCgpIHtcbiAgICB2aXJ0dWFsaXplciA/Pz0gbmV3IFZpcnR1YWxpemVyKG9wdGlvbnMoKSlcbiAgICByZXR1cm4gdmlydHVhbGl6ZXJcbiAgfVxuXG4gIGNvbnN0IHZpcnR1YWxpemVyU2lnbmFsID0gc2lnbmFsKHZpcnR1YWxpemVyISwgeyBlcXVhbDogKCkgPT4gZmFsc2UgfSlcblxuICAvLyB0d28td2F5IHN5bmMgb3B0aW9uc1xuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgX29wdGlvbnMgPSBvcHRpb25zKClcbiAgICAgIGxhenlJbml0KClcbiAgICAgIHZpcnR1YWxpemVyU2lnbmFsLnNldCh2aXJ0dWFsaXplcilcbiAgICAgIHZpcnR1YWxpemVyLnNldE9wdGlvbnMoe1xuICAgICAgICAuLi5fb3B0aW9ucyxcbiAgICAgICAgb25DaGFuZ2U6IChpbnN0YW5jZSwgc3luYykgPT4ge1xuICAgICAgICAgIC8vIHVwZGF0ZSB2aXJ0dWFsaXplclNpZ25hbCBzbyB0aGF0IGRlcGVuZGVudCBjb21wdXRlZHMgcmVjb21wdXRlLlxuICAgICAgICAgIHZpcnR1YWxpemVyU2lnbmFsLnNldChpbnN0YW5jZSlcbiAgICAgICAgICBfb3B0aW9ucy5vbkNoYW5nZT8uKGluc3RhbmNlLCBzeW5jKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC8vIHVwZGF0ZSB2aXJ0dWFsaXplclNpZ25hbCBzbyB0aGF0IGRlcGVuZGVudCBjb21wdXRlZHMgcmVjb21wdXRlLlxuICAgICAgdmlydHVhbGl6ZXJTaWduYWwuc2V0KHZpcnR1YWxpemVyKVxuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApXG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGNvbXB1dGVkKCgpID0+IG9wdGlvbnMoKS5nZXRTY3JvbGxFbGVtZW50KCkpXG4gIC8vIGxldCB0aGUgdmlydHVhbGl6ZXIga25vdyB3aGVuIHRoZSBzY3JvbGwgZWxlbWVudCBpcyBjaGFuZ2VkXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IHNjcm9sbEVsZW1lbnQoKVxuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIHVudHJhY2tlZCh2aXJ0dWFsaXplclNpZ25hbCkuX3dpbGxVcGRhdGUoKVxuICAgICAgfVxuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApXG5cbiAgbGV0IGNsZWFudXA6ICgpID0+IHZvaWQgfCB1bmRlZmluZWRcbiAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+ICh2aXJ0dWFsaXplciA/PyBsYXp5SW5pdCgpKS5fZGlkTW91bnQoKSwge1xuICAgIHBoYXNlOiBBZnRlclJlbmRlclBoYXNlLlJlYWQsXG4gIH0pXG5cbiAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiBjbGVhbnVwPy4oKSlcblxuICByZXR1cm4gcHJveHlWaXJ0dWFsaXplcih2aXJ0dWFsaXplclNpZ25hbCwgbGF6eUluaXQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RWaXJ0dWFsaXplcjxcbiAgVFNjcm9sbEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50LFxuICBUSXRlbUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50LFxuPihcbiAgb3B0aW9uczogKCkgPT4gUGFydGlhbEtleXM8XG4gICAgT21pdDxWaXJ0dWFsaXplck9wdGlvbnM8VFNjcm9sbEVsZW1lbnQsIFRJdGVtRWxlbWVudD4sICdnZXRTY3JvbGxFbGVtZW50Jz4sXG4gICAgJ29ic2VydmVFbGVtZW50UmVjdCcgfCAnb2JzZXJ2ZUVsZW1lbnRPZmZzZXQnIHwgJ3Njcm9sbFRvRm4nXG4gID4gJiB7XG4gICAgc2Nyb2xsRWxlbWVudDogRWxlbWVudFJlZjxUU2Nyb2xsRWxlbWVudD4gfCBUU2Nyb2xsRWxlbWVudCB8IHVuZGVmaW5lZFxuICB9LFxuKTogQW5ndWxhclZpcnR1YWxpemVyPFRTY3JvbGxFbGVtZW50LCBUSXRlbUVsZW1lbnQ+IHtcbiAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBvYnNlcnZlRWxlbWVudFJlY3Q6IG9ic2VydmVFbGVtZW50UmVjdCxcbiAgICAgIG9ic2VydmVFbGVtZW50T2Zmc2V0OiBvYnNlcnZlRWxlbWVudE9mZnNldCxcbiAgICAgIHNjcm9sbFRvRm46IGVsZW1lbnRTY3JvbGwsXG4gICAgICBnZXRTY3JvbGxFbGVtZW50OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRPclJlZiA9IG9wdGlvbnMoKS5zY3JvbGxFbGVtZW50XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGlzRWxlbWVudFJlZihlbGVtZW50T3JSZWYpXG4gICAgICAgICAgICA/IGVsZW1lbnRPclJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICA6IGVsZW1lbnRPclJlZikgPz8gbnVsbFxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9ucygpLFxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGNyZWF0ZVZpcnR1YWxpemVyQmFzZTxUU2Nyb2xsRWxlbWVudCwgVEl0ZW1FbGVtZW50PihyZXNvbHZlZE9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFJlZjxUIGV4dGVuZHMgRWxlbWVudD4oXG4gIGVsZW1lbnRPclJlZjogRWxlbWVudFJlZjxUPiB8IFQgfCB1bmRlZmluZWQsXG4pOiBlbGVtZW50T3JSZWYgaXMgRWxlbWVudFJlZjxUPiB7XG4gIHJldHVybiBlbGVtZW50T3JSZWYgIT0gbnVsbCAmJiAnbmF0aXZlRWxlbWVudCcgaW4gZWxlbWVudE9yUmVmXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RXaW5kb3dWaXJ0dWFsaXplcjxUSXRlbUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50PihcbiAgb3B0aW9uczogKCkgPT4gUGFydGlhbEtleXM8XG4gICAgVmlydHVhbGl6ZXJPcHRpb25zPFdpbmRvdywgVEl0ZW1FbGVtZW50PixcbiAgICB8ICdnZXRTY3JvbGxFbGVtZW50J1xuICAgIHwgJ29ic2VydmVFbGVtZW50UmVjdCdcbiAgICB8ICdvYnNlcnZlRWxlbWVudE9mZnNldCdcbiAgICB8ICdzY3JvbGxUb0ZuJ1xuICA+LFxuKTogQW5ndWxhclZpcnR1YWxpemVyPFdpbmRvdywgVEl0ZW1FbGVtZW50PiB7XG4gIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0U2Nyb2xsRWxlbWVudDogKCkgPT4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBudWxsKSxcbiAgICAgIG9ic2VydmVFbGVtZW50UmVjdDogb2JzZXJ2ZVdpbmRvd1JlY3QsXG4gICAgICBvYnNlcnZlRWxlbWVudE9mZnNldDogb2JzZXJ2ZVdpbmRvd09mZnNldCxcbiAgICAgIHNjcm9sbFRvRm46IHdpbmRvd1Njcm9sbCxcbiAgICAgIGluaXRpYWxPZmZzZXQ6ICgpID0+XG4gICAgICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuc2Nyb2xsWSA6IDAsXG4gICAgICAuLi5vcHRpb25zKCksXG4gICAgfVxuICB9KVxuICByZXR1cm4gY3JlYXRlVmlydHVhbGl6ZXJCYXNlPFdpbmRvdywgVEl0ZW1FbGVtZW50PihyZXNvbHZlZE9wdGlvbnMpXG59XG4iXX0=
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { computed, untracked } from '@angular/core';
|
|
2
|
+
export function proxyVirtualizer(virtualizerSignal, lazyInit) {
|
|
3
|
+
return new Proxy(virtualizerSignal, {
|
|
4
|
+
apply() {
|
|
5
|
+
return virtualizerSignal();
|
|
6
|
+
},
|
|
7
|
+
get(target, property) {
|
|
8
|
+
const untypedTarget = target;
|
|
9
|
+
if (untypedTarget[property]) {
|
|
10
|
+
return untypedTarget[property];
|
|
11
|
+
}
|
|
12
|
+
let virtualizer = untracked(virtualizerSignal);
|
|
13
|
+
if (virtualizer == null) {
|
|
14
|
+
virtualizer = lazyInit();
|
|
15
|
+
untracked(() => virtualizerSignal.set(virtualizer));
|
|
16
|
+
}
|
|
17
|
+
// Create computed signals for each property that represents a reactive value
|
|
18
|
+
if (typeof property === 'string' &&
|
|
19
|
+
[
|
|
20
|
+
'getTotalSize',
|
|
21
|
+
'getVirtualItems',
|
|
22
|
+
'isScrolling',
|
|
23
|
+
'options',
|
|
24
|
+
'range',
|
|
25
|
+
'scrollDirection',
|
|
26
|
+
'scrollElement',
|
|
27
|
+
'scrollOffset',
|
|
28
|
+
'scrollRect',
|
|
29
|
+
'measureElementCache',
|
|
30
|
+
'measurementsCache',
|
|
31
|
+
].includes(property)) {
|
|
32
|
+
const isFunction = typeof virtualizer[property] === 'function';
|
|
33
|
+
Object.defineProperty(untypedTarget, property, {
|
|
34
|
+
value: isFunction
|
|
35
|
+
? computed(() => target()[property]())
|
|
36
|
+
: computed(() => target()[property]),
|
|
37
|
+
configurable: true,
|
|
38
|
+
enumerable: true,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Create plain signals for functions that accept arguments and return reactive values
|
|
42
|
+
if (typeof property === 'string' &&
|
|
43
|
+
[
|
|
44
|
+
'getOffsetForAlignment',
|
|
45
|
+
'getOffsetForIndex',
|
|
46
|
+
'getVirtualItemForOffset',
|
|
47
|
+
'indexFromElement',
|
|
48
|
+
].includes(property)) {
|
|
49
|
+
const fn = untypedTarget[property];
|
|
50
|
+
Object.defineProperty(untypedTarget, property, {
|
|
51
|
+
value: toComputed(virtualizerSignal, fn),
|
|
52
|
+
configurable: true,
|
|
53
|
+
enumerable: true,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return untypedTarget[property] || virtualizer[property];
|
|
57
|
+
},
|
|
58
|
+
has(_, property) {
|
|
59
|
+
return !!untracked(virtualizerSignal)[property];
|
|
60
|
+
},
|
|
61
|
+
ownKeys() {
|
|
62
|
+
return Reflect.ownKeys(untracked(virtualizerSignal));
|
|
63
|
+
},
|
|
64
|
+
getOwnPropertyDescriptor() {
|
|
65
|
+
return {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
configurable: true,
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function toComputed(signal, fn) {
|
|
73
|
+
const computedCache = {};
|
|
74
|
+
return (...args) => {
|
|
75
|
+
// Cache computeds by their arguments to avoid re-creating the computed on each call
|
|
76
|
+
const serializedArgs = serializeArgs(...args);
|
|
77
|
+
if (computedCache.hasOwnProperty(serializedArgs)) {
|
|
78
|
+
return computedCache[serializedArgs]?.();
|
|
79
|
+
}
|
|
80
|
+
const computedSignal = computed(() => {
|
|
81
|
+
void signal();
|
|
82
|
+
return fn(...args);
|
|
83
|
+
});
|
|
84
|
+
computedCache[serializedArgs] = computedSignal;
|
|
85
|
+
return computedSignal();
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function serializeArgs(...args) {
|
|
89
|
+
return JSON.stringify(args);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQixRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSTNFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FLOUIsaUJBQW9DLEVBQ3BDLFFBQWlCO0lBRWpCLE9BQU8sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7UUFDbEMsS0FBSztZQUNILE9BQU8saUJBQWlCLEVBQUUsQ0FBQTtRQUM1QixDQUFDO1FBQ0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRO1lBQ2xCLE1BQU0sYUFBYSxHQUFHLE1BQWEsQ0FBQTtZQUNuQyxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDM0IsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7YUFDL0I7WUFDRCxJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtZQUM5QyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3ZCLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQTtnQkFDeEIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO2FBQ3BEO1lBRUQsNkVBQTZFO1lBQzdFLElBQ0UsT0FBTyxRQUFRLEtBQUssUUFBUTtnQkFDNUI7b0JBQ0UsY0FBYztvQkFDZCxpQkFBaUI7b0JBQ2pCLGFBQWE7b0JBQ2IsU0FBUztvQkFDVCxPQUFPO29CQUNQLGlCQUFpQjtvQkFDakIsZUFBZTtvQkFDZixjQUFjO29CQUNkLFlBQVk7b0JBQ1oscUJBQXFCO29CQUNyQixtQkFBbUI7aUJBQ3BCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUNwQjtnQkFDQSxNQUFNLFVBQVUsR0FDZCxPQUFPLFdBQVcsQ0FBQyxRQUFtQixDQUFDLEtBQUssVUFBVSxDQUFBO2dCQUN4RCxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUU7b0JBQzdDLEtBQUssRUFBRSxVQUFVO3dCQUNmLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUUsTUFBTSxFQUFFLENBQUMsUUFBbUIsQ0FBYyxFQUFFLENBQUM7d0JBQy9ELENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBbUIsQ0FBQyxDQUFDO29CQUNqRCxZQUFZLEVBQUUsSUFBSTtvQkFDbEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQTthQUNIO1lBRUQsc0ZBQXNGO1lBQ3RGLElBQ0UsT0FBTyxRQUFRLEtBQUssUUFBUTtnQkFDNUI7b0JBQ0UsdUJBQXVCO29CQUN2QixtQkFBbUI7b0JBQ25CLHlCQUF5QjtvQkFDekIsa0JBQWtCO2lCQUNuQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFDcEI7Z0JBQ0EsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBYSxDQUFBO2dCQUM5QyxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUU7b0JBQzdDLEtBQUssRUFBRSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO29CQUN4QyxZQUFZLEVBQUUsSUFBSTtvQkFDbEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQTthQUNIO1lBRUQsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLFFBQW1CLENBQUMsQ0FBQTtRQUNwRSxDQUFDO1FBQ0QsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFnQjtZQUNyQixPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxRQUFtQixDQUFDLENBQUE7UUFDNUQsQ0FBQztRQUNELE9BQU87WUFDTCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtRQUN0RCxDQUFDO1FBQ0Qsd0JBQXdCO1lBQ3RCLE9BQU87Z0JBQ0wsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUE7UUFDSCxDQUFDO0tBQ0YsQ0FBd0MsQ0FBQTtBQUMzQyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLE1BQWlCLEVBQ2pCLEVBQVk7SUFFWixNQUFNLGFBQWEsR0FBb0MsRUFBRSxDQUFBO0lBRXpELE9BQU8sQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO1FBQ3hCLG9GQUFvRjtRQUNwRixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUM3QyxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDaEQsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFBO1NBQ3pDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxLQUFLLE1BQU0sRUFBRSxDQUFBO1lBQ2IsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUNwQixDQUFDLENBQUMsQ0FBQTtRQUVGLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxjQUFjLENBQUE7UUFFOUMsT0FBTyxjQUFjLEVBQUUsQ0FBQTtJQUN6QixDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsR0FBRyxJQUFXO0lBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCwgY29tcHV0ZWQsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBWaXJ0dWFsaXplciB9IGZyb20gJ0B0YW5zdGFjay92aXJ0dWFsLWNvcmUnXG5pbXBvcnQgeyBBbmd1bGFyVmlydHVhbGl6ZXIgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcHJveHlWaXJ0dWFsaXplcjxcbiAgViBleHRlbmRzIFZpcnR1YWxpemVyPGFueSwgYW55PixcbiAgUyBleHRlbmRzIEVsZW1lbnQgfCBXaW5kb3cgPSBWIGV4dGVuZHMgVmlydHVhbGl6ZXI8aW5mZXIgVSwgYW55PiA/IFUgOiBuZXZlcixcbiAgSSBleHRlbmRzIEVsZW1lbnQgPSBWIGV4dGVuZHMgVmlydHVhbGl6ZXI8YW55LCBpbmZlciBVPiA/IFUgOiBuZXZlcixcbj4oXG4gIHZpcnR1YWxpemVyU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxWPixcbiAgbGF6eUluaXQ6ICgpID0+IFYsXG4pOiBBbmd1bGFyVmlydHVhbGl6ZXI8UywgST4ge1xuICByZXR1cm4gbmV3IFByb3h5KHZpcnR1YWxpemVyU2lnbmFsLCB7XG4gICAgYXBwbHkoKSB7XG4gICAgICByZXR1cm4gdmlydHVhbGl6ZXJTaWduYWwoKVxuICAgIH0sXG4gICAgZ2V0KHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IHVudHlwZWRUYXJnZXQgPSB0YXJnZXQgYXMgYW55XG4gICAgICBpZiAodW50eXBlZFRhcmdldFtwcm9wZXJ0eV0pIHtcbiAgICAgICAgcmV0dXJuIHVudHlwZWRUYXJnZXRbcHJvcGVydHldXG4gICAgICB9XG4gICAgICBsZXQgdmlydHVhbGl6ZXIgPSB1bnRyYWNrZWQodmlydHVhbGl6ZXJTaWduYWwpXG4gICAgICBpZiAodmlydHVhbGl6ZXIgPT0gbnVsbCkge1xuICAgICAgICB2aXJ0dWFsaXplciA9IGxhenlJbml0KClcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHZpcnR1YWxpemVyU2lnbmFsLnNldCh2aXJ0dWFsaXplcikpXG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBjb21wdXRlZCBzaWduYWxzIGZvciBlYWNoIHByb3BlcnR5IHRoYXQgcmVwcmVzZW50cyBhIHJlYWN0aXZlIHZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgW1xuICAgICAgICAgICdnZXRUb3RhbFNpemUnLFxuICAgICAgICAgICdnZXRWaXJ0dWFsSXRlbXMnLFxuICAgICAgICAgICdpc1Njcm9sbGluZycsXG4gICAgICAgICAgJ29wdGlvbnMnLFxuICAgICAgICAgICdyYW5nZScsXG4gICAgICAgICAgJ3Njcm9sbERpcmVjdGlvbicsXG4gICAgICAgICAgJ3Njcm9sbEVsZW1lbnQnLFxuICAgICAgICAgICdzY3JvbGxPZmZzZXQnLFxuICAgICAgICAgICdzY3JvbGxSZWN0JyxcbiAgICAgICAgICAnbWVhc3VyZUVsZW1lbnRDYWNoZScsXG4gICAgICAgICAgJ21lYXN1cmVtZW50c0NhY2hlJyxcbiAgICAgICAgXS5pbmNsdWRlcyhwcm9wZXJ0eSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpc0Z1bmN0aW9uID1cbiAgICAgICAgICB0eXBlb2YgdmlydHVhbGl6ZXJbcHJvcGVydHkgYXMga2V5b2YgVl0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHVudHlwZWRUYXJnZXQsIHByb3BlcnR5LCB7XG4gICAgICAgICAgdmFsdWU6IGlzRnVuY3Rpb25cbiAgICAgICAgICAgID8gY29tcHV0ZWQoKCkgPT4gKHRhcmdldCgpW3Byb3BlcnR5IGFzIGtleW9mIFZdIGFzIEZ1bmN0aW9uKSgpKVxuICAgICAgICAgICAgOiBjb21wdXRlZCgoKSA9PiB0YXJnZXQoKVtwcm9wZXJ0eSBhcyBrZXlvZiBWXSksXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBwbGFpbiBzaWduYWxzIGZvciBmdW5jdGlvbnMgdGhhdCBhY2NlcHQgYXJndW1lbnRzIGFuZCByZXR1cm4gcmVhY3RpdmUgdmFsdWVzXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgW1xuICAgICAgICAgICdnZXRPZmZzZXRGb3JBbGlnbm1lbnQnLFxuICAgICAgICAgICdnZXRPZmZzZXRGb3JJbmRleCcsXG4gICAgICAgICAgJ2dldFZpcnR1YWxJdGVtRm9yT2Zmc2V0JyxcbiAgICAgICAgICAnaW5kZXhGcm9tRWxlbWVudCcsXG4gICAgICAgIF0uaW5jbHVkZXMocHJvcGVydHkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZm4gPSB1bnR5cGVkVGFyZ2V0W3Byb3BlcnR5XSBhcyBGdW5jdGlvblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW50eXBlZFRhcmdldCwgcHJvcGVydHksIHtcbiAgICAgICAgICB2YWx1ZTogdG9Db21wdXRlZCh2aXJ0dWFsaXplclNpZ25hbCwgZm4pLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW50eXBlZFRhcmdldFtwcm9wZXJ0eV0gfHwgdmlydHVhbGl6ZXJbcHJvcGVydHkgYXMga2V5b2YgVl1cbiAgICB9LFxuICAgIGhhcyhfLCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gISF1bnRyYWNrZWQodmlydHVhbGl6ZXJTaWduYWwpW3Byb3BlcnR5IGFzIGtleW9mIFZdXG4gICAgfSxcbiAgICBvd25LZXlzKCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh1bnRyYWNrZWQodmlydHVhbGl6ZXJTaWduYWwpKVxuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfVxuICAgIH0sXG4gIH0pIGFzIHVua25vd24gYXMgQW5ndWxhclZpcnR1YWxpemVyPFMsIEk+XG59XG5cbmZ1bmN0aW9uIHRvQ29tcHV0ZWQ8ViBleHRlbmRzIFZpcnR1YWxpemVyPGFueSwgYW55Pj4oXG4gIHNpZ25hbDogU2lnbmFsPFY+LFxuICBmbjogRnVuY3Rpb24sXG4pIHtcbiAgY29uc3QgY29tcHV0ZWRDYWNoZTogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PiA9IHt9XG5cbiAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIC8vIENhY2hlIGNvbXB1dGVkcyBieSB0aGVpciBhcmd1bWVudHMgdG8gYXZvaWQgcmUtY3JlYXRpbmcgdGhlIGNvbXB1dGVkIG9uIGVhY2ggY2FsbFxuICAgIGNvbnN0IHNlcmlhbGl6ZWRBcmdzID0gc2VyaWFsaXplQXJncyguLi5hcmdzKVxuICAgIGlmIChjb21wdXRlZENhY2hlLmhhc093blByb3BlcnR5KHNlcmlhbGl6ZWRBcmdzKSkge1xuICAgICAgcmV0dXJuIGNvbXB1dGVkQ2FjaGVbc2VyaWFsaXplZEFyZ3NdPy4oKVxuICAgIH1cbiAgICBjb25zdCBjb21wdXRlZFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHZvaWQgc2lnbmFsKClcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKVxuICAgIH0pXG5cbiAgICBjb21wdXRlZENhY2hlW3NlcmlhbGl6ZWRBcmdzXSA9IGNvbXB1dGVkU2lnbmFsXG5cbiAgICByZXR1cm4gY29tcHV0ZWRTaWduYWwoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFyZ3MoLi4uYXJnczogYW55W10pIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3MpXG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuc3RhY2stYW5ndWxhci12aXJ0dWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RhbnN0YWNrLWFuZ3VsYXItdmlydHVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBWaXJ0dWFsaXplciB9IGZyb20gJ0B0YW5zdGFjay92aXJ0dWFsLWNvcmUnXG5cbmV4cG9ydCB0eXBlIEFuZ3VsYXJWaXJ0dWFsaXplcjxcbiAgVFNjcm9sbEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHwgV2luZG93LFxuICBUSXRlbUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50LFxuPiA9IE9taXQ8XG4gIFZpcnR1YWxpemVyPFRTY3JvbGxFbGVtZW50LCBUSXRlbUVsZW1lbnQ+LFxuICB8ICdnZXRUb3RhbFNpemUnXG4gIHwgJ2dldFZpcnR1YWxJdGVtcydcbiAgfCAnaXNTY3JvbGxpbmcnXG4gIHwgJ29wdGlvbnMnXG4gIHwgJ3JhbmdlJ1xuICB8ICdzY3JvbGxEaXJlY3Rpb24nXG4gIHwgJ3Njcm9sbEVsZW1lbnQnXG4gIHwgJ3Njcm9sbE9mZnNldCdcbiAgfCAnc2Nyb2xsUmVjdCdcbj4gJiB7XG4gIGdldFRvdGFsU2l6ZTogU2lnbmFsPFxuICAgIFJldHVyblR5cGU8VmlydHVhbGl6ZXI8VFNjcm9sbEVsZW1lbnQsIFRJdGVtRWxlbWVudD5bJ2dldFRvdGFsU2l6ZSddPlxuICA+XG4gIGdldFZpcnR1YWxJdGVtczogU2lnbmFsPFxuICAgIFJldHVyblR5cGU8VmlydHVhbGl6ZXI8VFNjcm9sbEVsZW1lbnQsIFRJdGVtRWxlbWVudD5bJ2dldFZpcnR1YWxJdGVtcyddPlxuICA+XG4gIGlzU2Nyb2xsaW5nOiBTaWduYWw8VmlydHVhbGl6ZXI8VFNjcm9sbEVsZW1lbnQsIFRJdGVtRWxlbWVudD5bJ2lzU2Nyb2xsaW5nJ10+XG4gIG9wdGlvbnM6IFNpZ25hbDxWaXJ0dWFsaXplcjxUU2Nyb2xsRWxlbWVudCwgVEl0ZW1FbGVtZW50Plsnb3B0aW9ucyddPlxuICByYW5nZTogU2lnbmFsPFZpcnR1YWxpemVyPFRTY3JvbGxFbGVtZW50LCBUSXRlbUVsZW1lbnQ+WydyYW5nZSddPlxuICBzY3JvbGxEaXJlY3Rpb246IFNpZ25hbDxcbiAgICBWaXJ0dWFsaXplcjxUU2Nyb2xsRWxlbWVudCwgVEl0ZW1FbGVtZW50Plsnc2Nyb2xsRGlyZWN0aW9uJ11cbiAgPlxuICBzY3JvbGxFbGVtZW50OiBTaWduYWw8XG4gICAgVmlydHVhbGl6ZXI8VFNjcm9sbEVsZW1lbnQsIFRJdGVtRWxlbWVudD5bJ3Njcm9sbEVsZW1lbnQnXVxuICA+XG4gIHNjcm9sbE9mZnNldDogU2lnbmFsPFxuICAgIFZpcnR1YWxpemVyPFRTY3JvbGxFbGVtZW50LCBUSXRlbUVsZW1lbnQ+WydzY3JvbGxPZmZzZXQnXVxuICA+XG4gIHNjcm9sbFJlY3Q6IFNpZ25hbDxWaXJ0dWFsaXplcjxUU2Nyb2xsRWxlbWVudCwgVEl0ZW1FbGVtZW50Plsnc2Nyb2xsUmVjdCddPlxufVxuIl19
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { Virtualizer, observeElementRect, observeElementOffset, elementScroll, observeWindowRect, observeWindowOffset, windowScroll } from '@tanstack/virtual-core';
|
|
2
|
+
export * from '@tanstack/virtual-core';
|
|
3
|
+
import { untracked, computed, signal, effect, afterNextRender, AfterRenderPhase, inject, DestroyRef } from '@angular/core';
|
|
4
|
+
|
|
5
|
+
function proxyVirtualizer(virtualizerSignal, lazyInit) {
|
|
6
|
+
return new Proxy(virtualizerSignal, {
|
|
7
|
+
apply() {
|
|
8
|
+
return virtualizerSignal();
|
|
9
|
+
},
|
|
10
|
+
get(target, property) {
|
|
11
|
+
const untypedTarget = target;
|
|
12
|
+
if (untypedTarget[property]) {
|
|
13
|
+
return untypedTarget[property];
|
|
14
|
+
}
|
|
15
|
+
let virtualizer = untracked(virtualizerSignal);
|
|
16
|
+
if (virtualizer == null) {
|
|
17
|
+
virtualizer = lazyInit();
|
|
18
|
+
untracked(() => virtualizerSignal.set(virtualizer));
|
|
19
|
+
}
|
|
20
|
+
// Create computed signals for each property that represents a reactive value
|
|
21
|
+
if (typeof property === 'string' &&
|
|
22
|
+
[
|
|
23
|
+
'getTotalSize',
|
|
24
|
+
'getVirtualItems',
|
|
25
|
+
'isScrolling',
|
|
26
|
+
'options',
|
|
27
|
+
'range',
|
|
28
|
+
'scrollDirection',
|
|
29
|
+
'scrollElement',
|
|
30
|
+
'scrollOffset',
|
|
31
|
+
'scrollRect',
|
|
32
|
+
'measureElementCache',
|
|
33
|
+
'measurementsCache',
|
|
34
|
+
].includes(property)) {
|
|
35
|
+
const isFunction = typeof virtualizer[property] === 'function';
|
|
36
|
+
Object.defineProperty(untypedTarget, property, {
|
|
37
|
+
value: isFunction
|
|
38
|
+
? computed(() => target()[property]())
|
|
39
|
+
: computed(() => target()[property]),
|
|
40
|
+
configurable: true,
|
|
41
|
+
enumerable: true,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Create plain signals for functions that accept arguments and return reactive values
|
|
45
|
+
if (typeof property === 'string' &&
|
|
46
|
+
[
|
|
47
|
+
'getOffsetForAlignment',
|
|
48
|
+
'getOffsetForIndex',
|
|
49
|
+
'getVirtualItemForOffset',
|
|
50
|
+
'indexFromElement',
|
|
51
|
+
].includes(property)) {
|
|
52
|
+
const fn = untypedTarget[property];
|
|
53
|
+
Object.defineProperty(untypedTarget, property, {
|
|
54
|
+
value: toComputed(virtualizerSignal, fn),
|
|
55
|
+
configurable: true,
|
|
56
|
+
enumerable: true,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return untypedTarget[property] || virtualizer[property];
|
|
60
|
+
},
|
|
61
|
+
has(_, property) {
|
|
62
|
+
return !!untracked(virtualizerSignal)[property];
|
|
63
|
+
},
|
|
64
|
+
ownKeys() {
|
|
65
|
+
return Reflect.ownKeys(untracked(virtualizerSignal));
|
|
66
|
+
},
|
|
67
|
+
getOwnPropertyDescriptor() {
|
|
68
|
+
return {
|
|
69
|
+
enumerable: true,
|
|
70
|
+
configurable: true,
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function toComputed(signal, fn) {
|
|
76
|
+
const computedCache = {};
|
|
77
|
+
return (...args) => {
|
|
78
|
+
// Cache computeds by their arguments to avoid re-creating the computed on each call
|
|
79
|
+
const serializedArgs = serializeArgs(...args);
|
|
80
|
+
if (computedCache.hasOwnProperty(serializedArgs)) {
|
|
81
|
+
return computedCache[serializedArgs]?.();
|
|
82
|
+
}
|
|
83
|
+
const computedSignal = computed(() => {
|
|
84
|
+
void signal();
|
|
85
|
+
return fn(...args);
|
|
86
|
+
});
|
|
87
|
+
computedCache[serializedArgs] = computedSignal;
|
|
88
|
+
return computedSignal();
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function serializeArgs(...args) {
|
|
92
|
+
return JSON.stringify(args);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function createVirtualizerBase(options) {
|
|
96
|
+
let virtualizer;
|
|
97
|
+
function lazyInit() {
|
|
98
|
+
virtualizer ??= new Virtualizer(options());
|
|
99
|
+
return virtualizer;
|
|
100
|
+
}
|
|
101
|
+
const virtualizerSignal = signal(virtualizer, { equal: () => false });
|
|
102
|
+
// two-way sync options
|
|
103
|
+
effect(() => {
|
|
104
|
+
const _options = options();
|
|
105
|
+
lazyInit();
|
|
106
|
+
virtualizerSignal.set(virtualizer);
|
|
107
|
+
virtualizer.setOptions({
|
|
108
|
+
..._options,
|
|
109
|
+
onChange: (instance, sync) => {
|
|
110
|
+
// update virtualizerSignal so that dependent computeds recompute.
|
|
111
|
+
virtualizerSignal.set(instance);
|
|
112
|
+
_options.onChange?.(instance, sync);
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
// update virtualizerSignal so that dependent computeds recompute.
|
|
116
|
+
virtualizerSignal.set(virtualizer);
|
|
117
|
+
}, { allowSignalWrites: true });
|
|
118
|
+
const scrollElement = computed(() => options().getScrollElement());
|
|
119
|
+
// let the virtualizer know when the scroll element is changed
|
|
120
|
+
effect(() => {
|
|
121
|
+
const el = scrollElement();
|
|
122
|
+
if (el) {
|
|
123
|
+
untracked(virtualizerSignal)._willUpdate();
|
|
124
|
+
}
|
|
125
|
+
}, { allowSignalWrites: true });
|
|
126
|
+
let cleanup;
|
|
127
|
+
afterNextRender(() => (virtualizer ?? lazyInit())._didMount(), {
|
|
128
|
+
phase: AfterRenderPhase.Read,
|
|
129
|
+
});
|
|
130
|
+
inject(DestroyRef).onDestroy(() => cleanup?.());
|
|
131
|
+
return proxyVirtualizer(virtualizerSignal, lazyInit);
|
|
132
|
+
}
|
|
133
|
+
function injectVirtualizer(options) {
|
|
134
|
+
const resolvedOptions = computed(() => {
|
|
135
|
+
return {
|
|
136
|
+
observeElementRect: observeElementRect,
|
|
137
|
+
observeElementOffset: observeElementOffset,
|
|
138
|
+
scrollToFn: elementScroll,
|
|
139
|
+
getScrollElement: () => {
|
|
140
|
+
const elementOrRef = options().scrollElement;
|
|
141
|
+
return ((isElementRef(elementOrRef)
|
|
142
|
+
? elementOrRef.nativeElement
|
|
143
|
+
: elementOrRef) ?? null);
|
|
144
|
+
},
|
|
145
|
+
...options(),
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
return createVirtualizerBase(resolvedOptions);
|
|
149
|
+
}
|
|
150
|
+
function isElementRef(elementOrRef) {
|
|
151
|
+
return elementOrRef != null && 'nativeElement' in elementOrRef;
|
|
152
|
+
}
|
|
153
|
+
function injectWindowVirtualizer(options) {
|
|
154
|
+
const resolvedOptions = computed(() => {
|
|
155
|
+
return {
|
|
156
|
+
getScrollElement: () => (typeof document !== 'undefined' ? window : null),
|
|
157
|
+
observeElementRect: observeWindowRect,
|
|
158
|
+
observeElementOffset: observeWindowOffset,
|
|
159
|
+
scrollToFn: windowScroll,
|
|
160
|
+
initialOffset: () => typeof document !== 'undefined' ? window.scrollY : 0,
|
|
161
|
+
...options(),
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
return createVirtualizerBase(resolvedOptions);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Generated bundle index. Do not edit.
|
|
169
|
+
*/
|
|
170
|
+
|
|
171
|
+
export { injectVirtualizer, injectWindowVirtualizer };
|
|
172
|
+
//# sourceMappingURL=tanstack-angular-virtual.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-angular-virtual.mjs","sources":["../../src/proxy.ts","../../src/index.ts","../../src/tanstack-angular-virtual.ts"],"sourcesContent":["import { Signal, WritableSignal, computed, untracked } from '@angular/core'\nimport { Virtualizer } from '@tanstack/virtual-core'\nimport { AngularVirtualizer } from './types'\n\nexport function proxyVirtualizer<\n V extends Virtualizer<any, any>,\n S extends Element | Window = V extends Virtualizer<infer U, any> ? U : never,\n I extends Element = V extends Virtualizer<any, infer U> ? U : never,\n>(\n virtualizerSignal: WritableSignal<V>,\n lazyInit: () => V,\n): AngularVirtualizer<S, I> {\n return new Proxy(virtualizerSignal, {\n apply() {\n return virtualizerSignal()\n },\n get(target, property) {\n const untypedTarget = target as any\n if (untypedTarget[property]) {\n return untypedTarget[property]\n }\n let virtualizer = untracked(virtualizerSignal)\n if (virtualizer == null) {\n virtualizer = lazyInit()\n untracked(() => virtualizerSignal.set(virtualizer))\n }\n\n // Create computed signals for each property that represents a reactive value\n if (\n typeof property === 'string' &&\n [\n 'getTotalSize',\n 'getVirtualItems',\n 'isScrolling',\n 'options',\n 'range',\n 'scrollDirection',\n 'scrollElement',\n 'scrollOffset',\n 'scrollRect',\n 'measureElementCache',\n 'measurementsCache',\n ].includes(property)\n ) {\n const isFunction =\n typeof virtualizer[property as keyof V] === 'function'\n Object.defineProperty(untypedTarget, property, {\n value: isFunction\n ? computed(() => (target()[property as keyof V] as Function)())\n : computed(() => target()[property as keyof V]),\n configurable: true,\n enumerable: true,\n })\n }\n\n // Create plain signals for functions that accept arguments and return reactive values\n if (\n typeof property === 'string' &&\n [\n 'getOffsetForAlignment',\n 'getOffsetForIndex',\n 'getVirtualItemForOffset',\n 'indexFromElement',\n ].includes(property)\n ) {\n const fn = untypedTarget[property] as Function\n Object.defineProperty(untypedTarget, property, {\n value: toComputed(virtualizerSignal, fn),\n configurable: true,\n enumerable: true,\n })\n }\n\n return untypedTarget[property] || virtualizer[property as keyof V]\n },\n has(_, property: string) {\n return !!untracked(virtualizerSignal)[property as keyof V]\n },\n ownKeys() {\n return Reflect.ownKeys(untracked(virtualizerSignal))\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n }) as unknown as AngularVirtualizer<S, I>\n}\n\nfunction toComputed<V extends Virtualizer<any, any>>(\n signal: Signal<V>,\n fn: Function,\n) {\n const computedCache: Record<string, Signal<unknown>> = {}\n\n return (...args: any[]) => {\n // Cache computeds by their arguments to avoid re-creating the computed on each call\n const serializedArgs = serializeArgs(...args)\n if (computedCache.hasOwnProperty(serializedArgs)) {\n return computedCache[serializedArgs]?.()\n }\n const computedSignal = computed(() => {\n void signal()\n return fn(...args)\n })\n\n computedCache[serializedArgs] = computedSignal\n\n return computedSignal()\n }\n}\n\nfunction serializeArgs(...args: any[]) {\n return JSON.stringify(args)\n}\n","import {\n elementScroll,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n PartialKeys,\n Virtualizer,\n VirtualizerOptions,\n windowScroll,\n} from '@tanstack/virtual-core'\nexport * from '@tanstack/virtual-core'\nexport * from './types'\n\nimport {\n signal,\n inject,\n DestroyRef,\n computed,\n Signal,\n effect,\n ElementRef,\n afterNextRender,\n untracked,\n AfterRenderPhase,\n} from '@angular/core'\nimport { AngularVirtualizer } from './types'\nimport { proxyVirtualizer } from './proxy'\n\nfunction createVirtualizerBase<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n>(\n options: Signal<VirtualizerOptions<TScrollElement, TItemElement>>,\n): AngularVirtualizer<TScrollElement, TItemElement> {\n let virtualizer: Virtualizer<TScrollElement, TItemElement>\n function lazyInit() {\n virtualizer ??= new Virtualizer(options())\n return virtualizer\n }\n\n const virtualizerSignal = signal(virtualizer!, { equal: () => false })\n\n // two-way sync options\n effect(\n () => {\n const _options = options()\n lazyInit()\n virtualizerSignal.set(virtualizer)\n virtualizer.setOptions({\n ..._options,\n onChange: (instance, sync) => {\n // update virtualizerSignal so that dependent computeds recompute.\n virtualizerSignal.set(instance)\n _options.onChange?.(instance, sync)\n },\n })\n // update virtualizerSignal so that dependent computeds recompute.\n virtualizerSignal.set(virtualizer)\n },\n { allowSignalWrites: true },\n )\n\n const scrollElement = computed(() => options().getScrollElement())\n // let the virtualizer know when the scroll element is changed\n effect(\n () => {\n const el = scrollElement()\n if (el) {\n untracked(virtualizerSignal)._willUpdate()\n }\n },\n { allowSignalWrites: true },\n )\n\n let cleanup: () => void | undefined\n afterNextRender(() => (virtualizer ?? lazyInit())._didMount(), {\n phase: AfterRenderPhase.Read,\n })\n\n inject(DestroyRef).onDestroy(() => cleanup?.())\n\n return proxyVirtualizer(virtualizerSignal, lazyInit)\n}\n\nexport function injectVirtualizer<\n TScrollElement extends Element,\n TItemElement extends Element,\n>(\n options: () => PartialKeys<\n Omit<VirtualizerOptions<TScrollElement, TItemElement>, 'getScrollElement'>,\n 'observeElementRect' | 'observeElementOffset' | 'scrollToFn'\n > & {\n scrollElement: ElementRef<TScrollElement> | TScrollElement | undefined\n },\n): AngularVirtualizer<TScrollElement, TItemElement> {\n const resolvedOptions = computed(() => {\n return {\n observeElementRect: observeElementRect,\n observeElementOffset: observeElementOffset,\n scrollToFn: elementScroll,\n getScrollElement: () => {\n const elementOrRef = options().scrollElement\n return (\n (isElementRef(elementOrRef)\n ? elementOrRef.nativeElement\n : elementOrRef) ?? null\n )\n },\n ...options(),\n }\n })\n return createVirtualizerBase<TScrollElement, TItemElement>(resolvedOptions)\n}\n\nfunction isElementRef<T extends Element>(\n elementOrRef: ElementRef<T> | T | undefined,\n): elementOrRef is ElementRef<T> {\n return elementOrRef != null && 'nativeElement' in elementOrRef\n}\n\nexport function injectWindowVirtualizer<TItemElement extends Element>(\n options: () => PartialKeys<\n VirtualizerOptions<Window, TItemElement>,\n | 'getScrollElement'\n | 'observeElementRect'\n | 'observeElementOffset'\n | 'scrollToFn'\n >,\n): AngularVirtualizer<Window, TItemElement> {\n const resolvedOptions = computed(() => {\n return {\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 ...options(),\n }\n })\n return createVirtualizerBase<Window, TItemElement>(resolvedOptions)\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tanstack/angular-virtual",
|
|
3
|
+
"version": "3.10.1",
|
|
4
|
+
"description": "Headless UI for virtualizing scrollable elements in Angular",
|
|
5
|
+
"author": "Garrett Darnell",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/TanStack/virtual.git",
|
|
10
|
+
"directory": "packages/angular-virtual"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://tanstack.com/virtual",
|
|
13
|
+
"funding": {
|
|
14
|
+
"type": "github",
|
|
15
|
+
"url": "https://github.com/sponsors/tannerlinsley"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"angular",
|
|
19
|
+
"virtual",
|
|
20
|
+
"virtual-core"
|
|
21
|
+
],
|
|
22
|
+
"type": "module",
|
|
23
|
+
"module": "build/fesm2022/tanstack-angular-virtual.mjs",
|
|
24
|
+
"types": "build/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./build/index.d.ts",
|
|
28
|
+
"esm2022": "./build/esm2022/tanstack-angular-virtual.mjs",
|
|
29
|
+
"esm": "./build/esm2022/tanstack-angular-virtual.mjs",
|
|
30
|
+
"default": "./build/fesm2022/tanstack-angular-virtual.mjs"
|
|
31
|
+
},
|
|
32
|
+
"./package.json": {
|
|
33
|
+
"default": "./package.json"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=12"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"build",
|
|
41
|
+
"!**/*.d.ts",
|
|
42
|
+
"!**/*.d.ts.map"
|
|
43
|
+
],
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"tslib": "^2.6.3",
|
|
46
|
+
"@tanstack/virtual-core": "3.10.1"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@angular/core": "^17.3.0",
|
|
50
|
+
"ng-packagr": "^17.3.0",
|
|
51
|
+
"typescript": "5.2.2"
|
|
52
|
+
},
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"@angular/core": ">=17"
|
|
55
|
+
},
|
|
56
|
+
"sideEffects": false,
|
|
57
|
+
"scripts": {}
|
|
58
|
+
}
|