From cbbf64672bb2b0d1fa047d89feef8875d5391df6 Mon Sep 17 00:00:00 2001 From: Guilherme Sehn Date: Wed, 24 Dec 2025 16:49:25 -0300 Subject: [PATCH 1/2] add tests --- .../react/src/select/root/SelectRoot.test.tsx | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/packages/react/src/select/root/SelectRoot.test.tsx b/packages/react/src/select/root/SelectRoot.test.tsx index 01d74cd55e0..edca290ddcc 100644 --- a/packages/react/src/select/root/SelectRoot.test.tsx +++ b/packages/react/src/select/root/SelectRoot.test.tsx @@ -1488,6 +1488,73 @@ describe('', () => { expect(trigger).to.have.attribute('data-filled'); }); + + describe('on multiple selects', () => { + it('adds [data-filled] attribute when at least one item is selected', async () => { + const { user } = await renderFakeTimers( + + + + + + + Select + Option 1 + Option 2 + Option 3 + + + + + , + ); + + const trigger = screen.getByTestId('trigger'); + expect(trigger).not.to.have.attribute('data-filled'); + + await user.click(trigger); + + await flushMicrotasks(); + clock.tick(200); + + const option = screen.getByRole('option', { name: 'Option 1' }); + + // Arrow Down to focus the Option 1 + await user.keyboard('{ArrowDown}'); + await user.click(option); + await flushMicrotasks(); + + expect(trigger).to.have.attribute('data-filled', ''); + await flushMicrotasks(); + + const select = screen.getByRole('listbox'); + expect(select).not.to.have.attribute('data-filled'); + }); + + it('adds [data-filled] attribute when already filled', async () => { + await renderFakeTimers( + + + + + + + Select + Option 1 + Option 2 + Option 3 + + + + + , + ); + + const trigger = screen.getByTestId('trigger'); + + expect(trigger).to.have.attribute('data-filled'); + }); + }); }); it('[data-focused]', async () => { From 433eef0cc4cffbef16786c71752fd2e889b6cf63 Mon Sep 17 00:00:00 2001 From: Guilherme Sehn Date: Wed, 24 Dec 2025 16:49:31 -0300 Subject: [PATCH 2/2] adjust logic --- packages/react/src/select/root/SelectRoot.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react/src/select/root/SelectRoot.tsx b/packages/react/src/select/root/SelectRoot.tsx index f4a0b189ce6..329fe11c2fb 100644 --- a/packages/react/src/select/root/SelectRoot.tsx +++ b/packages/react/src/select/root/SelectRoot.tsx @@ -194,8 +194,8 @@ export function SelectRoot( }, [store, value]); useIsoLayoutEffect(() => { - setFilled(value !== null); - }, [value, setFilled]); + setFilled(multiple && Array.isArray(value) ? value.length > 0 : value !== null); + }, [value, multiple, setFilled]); useIsoLayoutEffect( function syncSelectedIndex() {