diff --git a/.changeset/rich-poems-tickle.md b/.changeset/rich-poems-tickle.md new file mode 100644 index 000000000..877674188 --- /dev/null +++ b/.changeset/rich-poems-tickle.md @@ -0,0 +1,5 @@ +--- +'@tanstack/lit-virtual': minor +--- + +Re-export `@tanstack/virtual-core` from `@tanstack/lit-virtual`, so the core API (`Virtualizer`, `defaultRangeExtractor`, `measureElement`, the scroll observers and the shared types) can be imported from the adapter without adding `@tanstack/virtual-core` as a second dependency. Every other framework adapter already does this. diff --git a/packages/lit-virtual/src/index.ts b/packages/lit-virtual/src/index.ts index 963454fdb..8cfa1d643 100644 --- a/packages/lit-virtual/src/index.ts +++ b/packages/lit-virtual/src/index.ts @@ -10,6 +10,8 @@ import { import type { ReactiveController, ReactiveControllerHost } from 'lit' import type { PartialKeys, VirtualizerOptions } from '@tanstack/virtual-core' +export * from '@tanstack/virtual-core' + class VirtualizerControllerBase< TScrollElement extends Element | Window, TItemElement extends Element, diff --git a/packages/lit-virtual/tests/re-exports.test.ts b/packages/lit-virtual/tests/re-exports.test.ts new file mode 100644 index 000000000..8c6d0fae0 --- /dev/null +++ b/packages/lit-virtual/tests/re-exports.test.ts @@ -0,0 +1,39 @@ +import { expect, test } from 'vitest' +import { + Virtualizer, + defaultKeyExtractor, + defaultRangeExtractor, + elementScroll, + measureElement, + observeElementOffset, + observeElementRect, + observeWindowOffset, + observeWindowRect, + windowScroll, +} from '../src' + +// `@tanstack/lit-virtual` re-exports `@tanstack/virtual-core` so consumers can +// reach the core API without adding a second dependency, matching every other +// framework adapter in this repo. + +test('re-exports the Virtualizer class from virtual-core', () => { + expect(typeof Virtualizer).toBe('function') +}) + +test('re-exports the element observers and scroller from virtual-core', () => { + expect(typeof observeElementRect).toBe('function') + expect(typeof observeElementOffset).toBe('function') + expect(typeof elementScroll).toBe('function') +}) + +test('re-exports the window observers and scroller from virtual-core', () => { + expect(typeof observeWindowRect).toBe('function') + expect(typeof observeWindowOffset).toBe('function') + expect(typeof windowScroll).toBe('function') +}) + +test('re-exports the default extractors and measureElement from virtual-core', () => { + expect(typeof defaultRangeExtractor).toBe('function') + expect(typeof defaultKeyExtractor).toBe('function') + expect(typeof measureElement).toBe('function') +})