diff --git a/.changeset/bright-apes-begin.md b/.changeset/bright-apes-begin.md new file mode 100644 index 0000000000..59a383449c --- /dev/null +++ b/.changeset/bright-apes-begin.md @@ -0,0 +1,5 @@ +--- +"@lynx-js/web-elements": patch +--- + +Add scrollHeight/scrollWidth getters to XList. diff --git a/.github/lynx-stack.instructions.md b/.github/lynx-stack.instructions.md new file mode 100644 index 0000000000..54c8f0f100 --- /dev/null +++ b/.github/lynx-stack.instructions.md @@ -0,0 +1,5 @@ +--- +applyTo: "packages/web-platform/web-elements/**/*" +--- + +When updating web element APIs, add targeted Playwright tests in packages/web-platform/web-elements/tests/web-elements.spec.ts and keep changes minimal. diff --git a/packages/web-platform/web-elements/src/elements/XList/XList.ts b/packages/web-platform/web-elements/src/elements/XList/XList.ts index 234c70a4b4..ed84847c7f 100644 --- a/packages/web-platform/web-elements/src/elements/XList/XList.ts +++ b/packages/web-platform/web-elements/src/elements/XList/XList.ts @@ -46,6 +46,14 @@ export class XList extends HTMLElement { this.#getListContainer().scrollLeft = val; } + override get scrollHeight() { + return this.#getListContainer().scrollHeight; + } + + override get scrollWidth() { + return this.#getListContainer().scrollWidth; + } + get __scrollTop() { return super.scrollTop; } diff --git a/packages/web-platform/web-elements/tests/web-elements.spec.ts b/packages/web-platform/web-elements/tests/web-elements.spec.ts index 9de74f0fb8..4f4e0b668e 100644 --- a/packages/web-platform/web-elements/tests/web-elements.spec.ts +++ b/packages/web-platform/web-elements/tests/web-elements.spec.ts @@ -2141,11 +2141,19 @@ test.describe('web-elements test suite', () => { return (document.querySelector('x-list') as any) ?.getScrollContainerInfo(); })).jsonValue(); + const scrollHeight1 = await page.evaluate(() => { + return (document.querySelector('x-list') as any)?.scrollHeight; + }); + const scrollWidth1 = await page.evaluate(() => { + return (document.querySelector('x-list') as any)?.scrollWidth; + }); expect( typeof info1 === 'object' && info1.scrollLeft === 0 && info1.scrollTop === 0 && info1.scrollHeight !== 0 && info1.scrollWidth !== 0, ).toBeTruthy(); + expect(scrollHeight1).toBe(info1.scrollHeight); + expect(scrollWidth1).toBe(info1.scrollWidth); await page.evaluate(() => document.querySelector('x-list')?.shadowRoot?.querySelector( '#content', @@ -2157,11 +2165,19 @@ test.describe('web-elements test suite', () => { return (document.querySelector('x-list') as any) ?.getScrollContainerInfo(); })).jsonValue(); + const scrollHeight2 = await page.evaluate(() => { + return (document.querySelector('x-list') as any)?.scrollHeight; + }); + const scrollWidth2 = await page.evaluate(() => { + return (document.querySelector('x-list') as any)?.scrollWidth; + }); expect( typeof info2 === 'object' && info2.scrollLeft === 200 && info2.scrollTop === 200 && info2.scrollHeight !== 0 && info2.scrollWidth !== 0, ).toBeTruthy(); + expect(scrollHeight2).toBe(info2.scrollHeight); + expect(scrollWidth2).toBe(info2.scrollWidth); }, );