Feat/carousel impl #1

Merged
ilia merged 11 commits from feat/carousel-impl into main 2026-07-01 06:30:09 +00:00
Showing only changes of commit db6eb206fe - Show all commits
+30
View File
@@ -55,3 +55,33 @@ test('next/prev clamp to range and scroll to target offset', () => {
c.next(); c.next();
expect(track.scrollTo).toHaveBeenCalled(); expect(track.scrollTo).toHaveBeenCalled();
}); });
test('change fires with new index when a slide intersects', () => {
const c = createCarousel(track);
const seen: number[] = [];
c.on('change', (i) => seen.push(i));
(IOShim.last as IOShim).emit(2); // user swiped to slide 2
expect(seen).toEqual([2]);
expect(c.index).toBe(2);
});
test('change does not re-fire for the same index', () => {
const c = createCarousel(track);
const seen: number[] = [];
c.on('change', (i) => seen.push(i));
(IOShim.last as IOShim).emit(1);
(IOShim.last as IOShim).emit(1);
expect(seen).toEqual([1]);
});
test('unsubscribe stops delivery; destroy disconnects observer', () => {
const c = createCarousel(track);
const seen: number[] = [];
const off = c.on('change', (i) => seen.push(i));
off();
(IOShim.last as IOShim).emit(2);
expect(seen).toEqual([]);
const spy = vi.spyOn(IOShim.last as IOShim, 'disconnect');
c.destroy();
expect(spy).toHaveBeenCalled();
});