@praxisjs/composables 1.0.6 → 1.1.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,72 @@
1
1
  # @praxisjs/composables
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - fb8c10e: Add `VirtualList<T>` composable — a signal-based virtual scroll composable that replaces the `@Virtual` class decorator for use cases requiring reactive items and JSX `renderItem`.
8
+
9
+ **Why composable instead of decorator:** `@Virtual` as a class decorator had two fundamental problems:
10
+ 1. `items` was read as a snapshot at render time — filtering or external changes were ignored.
11
+ 2. `renderItem` callbacks using JSX failed on scroll-triggered effect re-runs because `getCurrentScope()` was null outside the render phase.
12
+
13
+ `VirtualList` solves both by exposing reactive signals that the component renders via normal JSX:
14
+
15
+ ```tsx
16
+ import { VirtualList, type VirtualItem } from "@praxisjs/composables";
17
+ import { getter } from "@praxisjs/decorators";
18
+
19
+ @Component()
20
+ class UserTable extends StatefulComponent {
21
+ @State() filter = "";
22
+ containerRef = { current: null as HTMLDivElement | null };
23
+
24
+ get rows() {
25
+ return ROWS.filter((r) => r.name.includes(this.filter));
26
+ }
27
+
28
+ @Compose(VirtualList, "containerRef", getter("rows"), 48, 5)
29
+ virtual!: VirtualList<Row>;
30
+
31
+ render() {
32
+ return (
33
+ <div
34
+ ref={(el) => {
35
+ this.containerRef.current = el;
36
+ }}
37
+ style="height:400px;overflow-y:auto"
38
+ >
39
+ <div
40
+ style={() =>
41
+ `height:${this.virtual.totalHeight}px;position:relative`
42
+ }
43
+ >
44
+ <div style={() => `height:${this.virtual.offsetTop}px`} />
45
+ {() =>
46
+ (this.virtual.visibleItems as VirtualItem<Row>[]).map(
47
+ ({ item }) => <div style="height:48px">{item.name}</div>,
48
+ )
49
+ }
50
+ <div style={() => `height:${this.virtual.offsetBottom}px`} />
51
+ </div>
52
+ </div>
53
+ );
54
+ }
55
+ }
56
+ ```
57
+
58
+ Exposed properties: `visibleItems: VirtualItem<T>[]`, `totalHeight: number`, `offsetTop: number`, `offsetBottom: number`.
59
+
60
+ ### Patch Changes
61
+
62
+ - 4de74c4: Fix `ElementSize`, `Intersection`, and `Focus` not reacting after mount.
63
+
64
+ All three composables used `effect()` inside `setup()` to watch `ref.current`. The effect ran during `bind()` (construction time) when the ref was still `null`, and since `ref.current` is a plain object mutation (not a signal write), the effect never re-ran after the DOM was ready.
65
+
66
+ The fix moves the observer/listener setup to `onMount()`, which fires after the component is inserted into the DOM and ref callbacks have already run — guaranteeing `ref.current` is available.
67
+
68
+ `ScrollPosition` also updated: now accepts `{ current: HTMLElement | null }` ref objects in addition to `HTMLElement | Window`, making it consistent with the other DOM composables. Listener setup moved to `onMount()` to correctly initialize scroll values.
69
+
3
70
  ## 1.0.6
4
71
 
5
72
  ### Patch Changes
@@ -60,39 +127,31 @@
60
127
  - 3372878: Migrate all packages from functional APIs to a decorator-first design.
61
128
 
62
129
  **`@praxisjs/core`**
63
-
64
130
  - Added `Composable` abstract base class for building class-based composables
65
131
  - Removed `resource`, `createResource`, `Resource`, `ResourceStatus`, `ResourceOptions` from public exports — use `@Resource` from `@praxisjs/decorators` instead
66
132
 
67
133
  **`@praxisjs/motion`**
68
-
69
134
  - Replaced `useMotion`, `tween`, `spring`, `createTransition`, `Animate`, `easings`, `resolveEasing` with `@Tween` and `@Spring` decorators
70
135
 
71
136
  **`@praxisjs/di`**
72
-
73
137
  - Replaced `useService` and `createScope` with a `@Scope` decorator
74
138
  - Renamed exported type `Scope` to `ScopeType` to free the name for the new decorator
75
139
 
76
140
  **`@praxisjs/fsm`**
77
-
78
141
  - Removed `createMachine` — use the `@StateMachine` and `@Transition` decorators directly
79
142
 
80
143
  **`@praxisjs/router`**
81
-
82
144
  - Removed `createRouter`, `lazy`, `useRouter`, `useParams`, `useQuery`, `useLocation`
83
145
  - Added `@RouterConfig`, `@Lazy`, `@InjectRouter`, `@Params`, `@Query`, `@Location` decorators
84
146
 
85
147
  **`@praxisjs/store`**
86
-
87
148
  - Removed `createStore` — use the `@Store` and `@UseStore` decorators directly
88
149
 
89
150
  **`@praxisjs/composables`**
90
-
91
151
  - Replaced all `use*` composable functions with class-based composables extending `Composable`:
92
152
  `WindowSize`, `ScrollPosition`, `ElementSize`, `Intersection`, `Focus`, `MediaQuery`, `ColorScheme`, `Mouse`, `KeyCombo`, `Idle`, `Clipboard`, `Geolocation`, `TimeAgo`, `Pagination`
93
153
 
94
154
  **`@praxisjs/concurrent`**
95
-
96
155
  - Removed `task`, `queue`, `pool` and their instance types — use `@Task`, `@Queue`, `@Pool` decorators instead
97
156
 
98
157
  ### Patch Changes
@@ -126,7 +185,6 @@
126
185
  ### Patch Changes
127
186
 
128
187
  - bb0d4f8: **Refactor decorator system and component architecture across PraxisJS packages**
129
-
130
188
  - Replaced legacy decorator signatures (`constructor`, `target`, `propertyKey`, method descriptor) with the standard TC39 decorator context API (`ClassDecoratorContext`, `ClassFieldDecoratorContext`, `ClassMethodDecoratorContext`) across `@praxisjs/decorators`, `@praxisjs/store`, `@praxisjs/concurrent`, `@praxisjs/router`, `@praxisjs/motion`, `@praxisjs/di`, and `@praxisjs/fsm`.
131
189
  - Introduced `StatefulComponent` and `StatelessComponent` as the new base classes, replacing the deprecated `BaseComponent`/`Function Component` pattern, across `@praxisjs/core`, `@praxisjs/runtime`, `@praxisjs/devtools`, and templates.
132
190
  - Implemented core rendering functionality in `@praxisjs/runtime` (`mountChildren`, `mountComponent`, reactive scope management) and removed the deprecated `renderer.ts`.
@@ -1,6 +1,5 @@
1
1
  // @vitest-environment jsdom
2
2
  import { describe, it, expect, vi, beforeEach } from "vitest";
3
- import { signal } from "@praxisjs/core/internal";
4
3
  import { WindowSize, ScrollPosition, ElementSize, Intersection, Focus } from "../dom";
5
4
  // ── WindowSize ────────────────────────────────────────────────────────────────
6
5
  describe("WindowSize", () => {
@@ -42,6 +41,7 @@ describe("ScrollPosition", () => {
42
41
  it("updates on scroll event for window", () => {
43
42
  const sp = new ScrollPosition(window);
44
43
  const { x, y } = sp.setup();
44
+ sp.onMount();
45
45
  Object.defineProperty(window, "scrollX", { value: 100, configurable: true });
46
46
  Object.defineProperty(window, "scrollY", { value: 200, configurable: true });
47
47
  window.dispatchEvent(new Event("scroll"));
@@ -52,6 +52,7 @@ describe("ScrollPosition", () => {
52
52
  const el = document.createElement("div");
53
53
  const sp = new ScrollPosition(el);
54
54
  const { x, y } = sp.setup();
55
+ sp.onMount();
55
56
  Object.defineProperty(el, "scrollLeft", { value: 50, configurable: true });
56
57
  Object.defineProperty(el, "scrollTop", { value: 75, configurable: true });
57
58
  el.dispatchEvent(new Event("scroll"));
@@ -63,6 +64,7 @@ describe("ScrollPosition", () => {
63
64
  const remove = vi.spyOn(el, "removeEventListener");
64
65
  const sp = new ScrollPosition(el);
65
66
  sp.setup();
67
+ sp.onMount();
66
68
  sp.onUnmount();
67
69
  expect(remove).toHaveBeenCalledWith("scroll", expect.any(Function));
68
70
  });
@@ -110,6 +112,12 @@ describe("ElementSize", () => {
110
112
  es.onUnmount();
111
113
  expect(disconnect).toHaveBeenCalled();
112
114
  });
115
+ it("onMount() with null ref is a no-op", () => {
116
+ const ref = { current: null };
117
+ const es = new ElementSize(ref);
118
+ es.setup();
119
+ expect(() => es.onMount()).not.toThrow();
120
+ });
113
121
  });
114
122
  // ── Intersection ──────────────────────────────────────────────────────────────
115
123
  describe("Intersection", () => {
@@ -152,6 +160,37 @@ describe("Intersection", () => {
152
160
  int.onUnmount();
153
161
  expect(disconnect).toHaveBeenCalled();
154
162
  });
163
+ it("onMount() calls observe() with the element", () => {
164
+ const observeFn = vi.fn();
165
+ vi.stubGlobal("IntersectionObserver", class {
166
+ constructor(cb) {
167
+ this.observe = observeFn;
168
+ this.disconnect = vi.fn();
169
+ observerCallback = cb;
170
+ }
171
+ });
172
+ const el = document.createElement("div");
173
+ const ref = { current: el };
174
+ const int = new Intersection(ref);
175
+ int.setup();
176
+ int.onMount();
177
+ expect(observeFn).toHaveBeenCalledWith(el);
178
+ });
179
+ it("onMount() does nothing when ref is null", () => {
180
+ const observeFn = vi.fn();
181
+ vi.stubGlobal("IntersectionObserver", class {
182
+ constructor(cb) {
183
+ this.observe = observeFn;
184
+ this.disconnect = vi.fn();
185
+ observerCallback = cb;
186
+ }
187
+ });
188
+ const ref = { current: null };
189
+ const int = new Intersection(ref);
190
+ int.setup();
191
+ expect(() => int.onMount()).not.toThrow();
192
+ expect(observeFn).not.toHaveBeenCalled();
193
+ });
155
194
  });
156
195
  // ── ElementSize (additional) ──────────────────────────────────────────────────
157
196
  describe("ElementSize (additional)", () => {
@@ -168,6 +207,7 @@ describe("ElementSize (additional)", () => {
168
207
  const ref = { current: el1 };
169
208
  const es = new ElementSize(ref);
170
209
  es.setup();
210
+ es.onMount();
171
211
  // Disconnect old observer and create new one for el2
172
212
  es.onUnmount();
173
213
  expect(disconnectFn).toHaveBeenCalled();
@@ -175,6 +215,7 @@ describe("ElementSize (additional)", () => {
175
215
  ref.current = el2;
176
216
  const es2 = new ElementSize(ref);
177
217
  es2.setup();
218
+ es2.onMount();
178
219
  expect(observeFn).toHaveBeenCalledWith(el2);
179
220
  });
180
221
  });
@@ -201,14 +242,48 @@ describe("Intersection (additional)", () => {
201
242
  expect(visible()).toBe(false);
202
243
  });
203
244
  });
245
+ // ── ScrollPosition (ref-based) ────────────────────────────────────────────────
246
+ describe("ScrollPosition (ref-based)", () => {
247
+ it("accepts a ref object and reads scrollLeft/scrollTop from it", () => {
248
+ const el = document.createElement("div");
249
+ const ref = { current: el };
250
+ const sp = new ScrollPosition(ref);
251
+ const { x, y } = sp.setup();
252
+ sp.onMount();
253
+ Object.defineProperty(el, "scrollLeft", { value: 30, configurable: true });
254
+ Object.defineProperty(el, "scrollTop", { value: 60, configurable: true });
255
+ el.dispatchEvent(new Event("scroll"));
256
+ expect(x()).toBe(30);
257
+ expect(y()).toBe(60);
258
+ });
259
+ it("uses ref.current at mount time — subsequent current changes do not affect the listener target", () => {
260
+ const el = document.createElement("div");
261
+ const ref = { current: el };
262
+ const sp = new ScrollPosition(ref);
263
+ sp.setup();
264
+ sp.onMount();
265
+ const remove = vi.spyOn(el, "removeEventListener");
266
+ sp.onUnmount();
267
+ expect(remove).toHaveBeenCalledWith("scroll", expect.any(Function));
268
+ });
269
+ it("falls back to window when ref.current is null at mount time", () => {
270
+ const ref = { current: null };
271
+ const sp = new ScrollPosition(ref);
272
+ sp.setup();
273
+ // Should not throw; _target falls back to window
274
+ expect(() => sp.onMount()).not.toThrow();
275
+ sp.onUnmount();
276
+ });
277
+ });
204
278
  // ── ScrollPosition (additional) ───────────────────────────────────────────────
205
279
  describe("ScrollPosition (additional)", () => {
206
- it("setup() called twice registers only one scroll listener", () => {
280
+ it("onMount() called twice registers only one scroll listener", () => {
207
281
  const el = document.createElement("div");
208
282
  const add = vi.spyOn(el, "addEventListener");
209
283
  const sp = new ScrollPosition(el);
210
284
  sp.setup();
211
- sp.setup();
285
+ sp.onMount();
286
+ sp.onMount(); // second call must be a no-op
212
287
  const scrollCalls = add.mock.calls.filter((c) => c[0] === "scroll").length;
213
288
  expect(scrollCalls).toBe(1);
214
289
  });
@@ -228,6 +303,7 @@ describe("Focus", () => {
228
303
  const ref = { current: el };
229
304
  const focus = new Focus(ref);
230
305
  const { focused } = focus.setup();
306
+ focus.onMount();
231
307
  el.dispatchEvent(new Event("focus"));
232
308
  expect(focused()).toBe(true);
233
309
  document.body.removeChild(el);
@@ -238,6 +314,7 @@ describe("Focus", () => {
238
314
  const ref = { current: el };
239
315
  const focus = new Focus(ref);
240
316
  const { focused } = focus.setup();
317
+ focus.onMount();
241
318
  el.dispatchEvent(new Event("focus"));
242
319
  el.dispatchEvent(new Event("blur"));
243
320
  expect(focused()).toBe(false);
@@ -248,33 +325,40 @@ describe("Focus", () => {
248
325
  const focus = new Focus(ref);
249
326
  expect(() => focus.setup()).not.toThrow();
250
327
  });
251
- it("removes focus/blur listeners when reactive ref changes (effect cleanup)", () => {
252
- const el1 = document.createElement("input");
253
- document.body.appendChild(el1);
254
- // Make ref.current reactive so the effect tracks it and re-runs on change
255
- const refSignal = signal(el1);
256
- const ref = { get current() { return refSignal(); } };
328
+ it("onMount() with null ref is a no-op", () => {
329
+ const ref = { current: null };
330
+ const focus = new Focus(ref);
331
+ focus.setup();
332
+ expect(() => focus.onMount()).not.toThrow();
333
+ });
334
+ it("onUnmount() with null ref is a no-op", () => {
335
+ const ref = { current: null };
257
336
  const focus = new Focus(ref);
258
337
  focus.setup();
259
- const removeEl1 = vi.spyOn(el1, "removeEventListener");
260
- // Changing the signal causes the effect to re-run, calling cleanup for el1
261
- // This covers the cleanup function at dom.ts:134-135
262
- const el2 = document.createElement("input");
263
- document.body.appendChild(el2);
264
- refSignal.set(el2);
265
- expect(removeEl1).toHaveBeenCalledWith("focus", expect.any(Function));
266
- expect(removeEl1).toHaveBeenCalledWith("blur", expect.any(Function));
267
- document.body.removeChild(el1);
268
- document.body.removeChild(el2);
269
- });
270
- it("setup() called twice registers only one listener pair", () => {
338
+ expect(() => focus.onUnmount()).not.toThrow();
339
+ });
340
+ it("removes focus/blur listeners on unmount", () => {
271
341
  const el = document.createElement("input");
272
342
  document.body.appendChild(el);
273
- const add = vi.spyOn(el, "addEventListener");
274
343
  const ref = { current: el };
275
344
  const focus = new Focus(ref);
276
345
  focus.setup();
346
+ focus.onMount();
347
+ const remove = vi.spyOn(el, "removeEventListener");
348
+ focus.onUnmount();
349
+ expect(remove).toHaveBeenCalledWith("focus", expect.any(Function));
350
+ expect(remove).toHaveBeenCalledWith("blur", expect.any(Function));
351
+ document.body.removeChild(el);
352
+ });
353
+ it("onMount() called twice registers only one listener pair", () => {
354
+ const el = document.createElement("input");
355
+ document.body.appendChild(el);
356
+ const add = vi.spyOn(el, "addEventListener");
357
+ const ref = { current: el };
358
+ const focus = new Focus(ref);
277
359
  focus.setup();
360
+ focus.onMount();
361
+ focus.onMount(); // second call must be a no-op
278
362
  const focusCalls = add.mock.calls.filter((c) => c[0] === "focus").length;
279
363
  expect(focusCalls).toBe(1);
280
364
  document.body.removeChild(el);
@@ -1 +1 @@
1
- {"version":3,"file":"dom.test.js","sourceRoot":"","sources":["../../src/__tests__/dom.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dom.test.js","sourceRoot":"","sources":["../../src/__tests__/dom.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/list.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,156 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect, vi } from "vitest";
3
+ import { signal } from "@praxisjs/core/internal";
4
+ // Import from index to cover re-exports
5
+ import { VirtualList } from "../index";
6
+ function makeItems(count) {
7
+ return Array.from({ length: count }, (_, i) => ({ id: i }));
8
+ }
9
+ // ── VirtualList ───────────────────────────────────────────────────────────────
10
+ describe("VirtualList", () => {
11
+ const ITEM_HEIGHT = 50;
12
+ const VIEW_HEIGHT = 600;
13
+ const BUFFER = 3;
14
+ it("setup() returns computed signals for all four properties", () => {
15
+ const ref = { current: null };
16
+ const vl = new VirtualList(ref, () => makeItems(10), ITEM_HEIGHT);
17
+ const view = vl.setup();
18
+ expect(typeof view.visibleItems).toBe("function");
19
+ expect(typeof view.totalHeight).toBe("function");
20
+ expect(typeof view.offsetTop).toBe("function");
21
+ expect(typeof view.offsetBottom).toBe("function");
22
+ });
23
+ it("totalHeight = items.length * itemHeight", () => {
24
+ const ref = { current: null };
25
+ const vl = new VirtualList(ref, () => makeItems(100), ITEM_HEIGHT);
26
+ const { totalHeight } = vl.setup();
27
+ expect(totalHeight()).toBe(100 * ITEM_HEIGHT);
28
+ });
29
+ it("offsetTop = 0 when scrolled to top", () => {
30
+ const ref = { current: null };
31
+ const vl = new VirtualList(ref, () => makeItems(100), ITEM_HEIGHT);
32
+ const { offsetTop } = vl.setup();
33
+ expect(offsetTop()).toBe(0);
34
+ });
35
+ it("visibleItems starts at index 0 with buffer window", () => {
36
+ const ref = { current: null };
37
+ // default viewHeight=600, buffer=3, scrollTop=0
38
+ // startIdx = max(0, floor(0/50) - 3) = 0
39
+ // endIdx = min(99, ceil((0+600)/50) + 3) = min(99, 12+3) = 15
40
+ const vl = new VirtualList(ref, () => makeItems(100), ITEM_HEIGHT, BUFFER);
41
+ const { visibleItems } = vl.setup();
42
+ const items = visibleItems();
43
+ expect(items[0].index).toBe(0);
44
+ expect(items[items.length - 1].index).toBe(15);
45
+ });
46
+ it("visibleItems contains the correct item references", () => {
47
+ const source = makeItems(20);
48
+ const ref = { current: null };
49
+ const vl = new VirtualList(ref, () => source, ITEM_HEIGHT, 0);
50
+ const { visibleItems } = vl.setup();
51
+ const items = visibleItems();
52
+ expect(items[0].item).toBe(source[0]);
53
+ expect(items[0].index).toBe(0);
54
+ });
55
+ it("offsetBottom reflects the hidden rows below the window", () => {
56
+ const ref = { current: null };
57
+ // startIdx=0, endIdx=15, total=100
58
+ // offsetBottom = max(0, 100-1-15) * 50 = 84 * 50 = 4200
59
+ const vl = new VirtualList(ref, () => makeItems(100), ITEM_HEIGHT, BUFFER);
60
+ const { offsetBottom } = vl.setup();
61
+ expect(offsetBottom()).toBe((100 - 1 - 15) * ITEM_HEIGHT);
62
+ });
63
+ it("empty list: all offsets are 0 and visibleItems is empty", () => {
64
+ const ref = { current: null };
65
+ const vl = new VirtualList(ref, () => [], ITEM_HEIGHT);
66
+ const { visibleItems, totalHeight, offsetTop, offsetBottom } = vl.setup();
67
+ expect(visibleItems()).toHaveLength(0);
68
+ expect(totalHeight()).toBe(0);
69
+ expect(offsetTop()).toBe(0);
70
+ expect(offsetBottom()).toBe(0);
71
+ });
72
+ });
73
+ // ── VirtualList — onMount ─────────────────────────────────────────────────────
74
+ describe("VirtualList — onMount", () => {
75
+ const ITEM_HEIGHT = 50;
76
+ it("onMount() with null ref is a no-op", () => {
77
+ const ref = { current: null };
78
+ const vl = new VirtualList(ref, () => makeItems(10), ITEM_HEIGHT);
79
+ vl.setup();
80
+ expect(() => vl.onMount()).not.toThrow();
81
+ });
82
+ it("onMount() sets viewHeight from container's clientHeight when > 0", () => {
83
+ const el = document.createElement("div");
84
+ Object.defineProperty(el, "clientHeight", { value: 400, configurable: true });
85
+ const ref = { current: el };
86
+ const vl = new VirtualList(ref, () => makeItems(100), ITEM_HEIGHT, 0);
87
+ const { visibleItems } = vl.setup();
88
+ vl.onMount();
89
+ // With viewHeight=400 and no buffer: endIdx = min(99, ceil(400/50)-1) = 7
90
+ // Visible range [0..7] = 8 items
91
+ const items = visibleItems();
92
+ expect(items.length).toBeLessThan(100);
93
+ expect(items.length).toBeGreaterThan(0);
94
+ // Specifically: ceil((0+400)/50) + 0 = 8; min(99, 8) = 8 → indices 0..8 = 9 items
95
+ expect(items[items.length - 1].index).toBe(8);
96
+ });
97
+ it("onMount() does not override default viewHeight when clientHeight is 0", () => {
98
+ const el = document.createElement("div");
99
+ Object.defineProperty(el, "clientHeight", { value: 0, configurable: true });
100
+ const ref = { current: el };
101
+ const vl = new VirtualList(ref, () => makeItems(100), ITEM_HEIGHT, 0);
102
+ const { visibleItems } = vl.setup();
103
+ vl.onMount();
104
+ // Default viewHeight=600 preserved; endIdx = min(99, ceil(600/50)) = 12
105
+ const items = visibleItems();
106
+ expect(items[items.length - 1].index).toBe(12);
107
+ });
108
+ it("onMount() registers a scroll listener that updates the window", () => {
109
+ const el = document.createElement("div");
110
+ Object.defineProperty(el, "clientHeight", { value: 0, configurable: true });
111
+ const ref = { current: el };
112
+ const vl = new VirtualList(ref, () => makeItems(100), ITEM_HEIGHT, 0);
113
+ const { offsetTop } = vl.setup();
114
+ vl.onMount();
115
+ expect(offsetTop()).toBe(0);
116
+ Object.defineProperty(el, "scrollTop", { value: 500, configurable: true });
117
+ el.dispatchEvent(new Event("scroll"));
118
+ // scrollTop=500, buffer=0: startIdx = floor(500/50) = 10; offsetTop = 10*50 = 500
119
+ expect(offsetTop()).toBe(500);
120
+ });
121
+ });
122
+ // ── VirtualList — onUnmount ───────────────────────────────────────────────────
123
+ describe("VirtualList — onUnmount", () => {
124
+ const ITEM_HEIGHT = 50;
125
+ it("onUnmount() removes the scroll listener", () => {
126
+ const el = document.createElement("div");
127
+ const remove = vi.spyOn(el, "removeEventListener");
128
+ const ref = { current: el };
129
+ const vl = new VirtualList(ref, () => makeItems(50), ITEM_HEIGHT);
130
+ vl.setup();
131
+ vl.onMount();
132
+ vl.onUnmount();
133
+ expect(remove).toHaveBeenCalledWith("scroll", expect.any(Function));
134
+ });
135
+ it("onUnmount() without prior onMount() does not throw", () => {
136
+ const ref = { current: null };
137
+ const vl = new VirtualList(ref, () => makeItems(10), ITEM_HEIGHT);
138
+ vl.setup();
139
+ expect(() => vl.onUnmount()).not.toThrow();
140
+ });
141
+ });
142
+ // ── VirtualList — reactive getItems ──────────────────────────────────────────
143
+ describe("VirtualList — reactive getItems", () => {
144
+ it("visibleItems updates when the source signal changes", () => {
145
+ const itemsSignal = signal(makeItems(5));
146
+ const ref = { current: null };
147
+ const vl = new VirtualList(ref, () => itemsSignal(), 50);
148
+ const { visibleItems, totalHeight } = vl.setup();
149
+ expect(totalHeight()).toBe(250);
150
+ expect(visibleItems()).toHaveLength(5);
151
+ itemsSignal.set(makeItems(10));
152
+ expect(totalHeight()).toBe(500);
153
+ expect(visibleItems()).toHaveLength(10);
154
+ });
155
+ });
156
+ //# sourceMappingURL=list.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.test.js","sourceRoot":"","sources":["../../src/__tests__/list.test.ts"],"names":[],"mappings":"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"}