From e525d71b6db41ad460ed7ba017a0b321f5118e47 Mon Sep 17 00:00:00 2001 From: Yangfan Wu <39647285+wyf027@users.noreply.github.com> Date: Sat, 4 Jul 2026 19:56:53 +0800 Subject: [PATCH 1/2] feat(select): expose native change event callback --- packages/ui/src/components/form/controls/Select/Select.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/ui/src/components/form/controls/Select/Select.tsx b/packages/ui/src/components/form/controls/Select/Select.tsx index 7a4e7e3..086fbff 100644 --- a/packages/ui/src/components/form/controls/Select/Select.tsx +++ b/packages/ui/src/components/form/controls/Select/Select.tsx @@ -25,6 +25,7 @@ export interface SelectProps defaultValue?: string size?: ComponentSize onChange?: (value: string) => void + onNativeChange?: (event: ChangeEvent) => void slotClassNames?: SlotClassNames } @@ -39,6 +40,7 @@ export const Select = forwardRef(function Select size = 'md', id, onChange, + onNativeChange, disabled, slotClassNames, ...props @@ -57,6 +59,7 @@ export const Select = forwardRef(function Select const handleChange = (event: ChangeEvent) => { setInnerValue(event.target.value) + onNativeChange?.(event) } return ( From 90504abdb9f142ca8b47851b33edfbefbd8275c1 Mon Sep 17 00:00:00 2001 From: Yangfan Wu <39647285+wyf027@users.noreply.github.com> Date: Sat, 4 Jul 2026 19:57:08 +0800 Subject: [PATCH 2/2] test(select): cover native change event callback --- .../form/controls/Select/Select.test.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/ui/src/components/form/controls/Select/Select.test.tsx b/packages/ui/src/components/form/controls/Select/Select.test.tsx index 0490725..224ee52 100644 --- a/packages/ui/src/components/form/controls/Select/Select.test.tsx +++ b/packages/ui/src/components/form/controls/Select/Select.test.tsx @@ -33,4 +33,18 @@ describe('Select', () => { expect(onChange).toHaveBeenCalledWith('2') }) + + it('calls onNativeChange with the select change event', async () => { + const user = userEvent.setup() + const onNativeChange = vi.fn() + + const { getByRole } = render( +