Skip to content

Commit f7c199f

Browse files
feat(select): select component dismisses on blur
1 parent 78942cd commit f7c199f

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

apps/website/src/routes/docs/headless/select/select.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,21 @@ test.describe('Keyboard Behavior', () => {
171171
await expect(getListbox()).toBeHidden();
172172
await expect(getTrigger()).toHaveAttribute('aria-expanded', 'false');
173173
});
174+
175+
test(`GIVEN a hero select with an opened listbox
176+
WHEN focusing something outside of the hero select's trigger
177+
THEN the listbox should close
178+
AND aria-expanded should be false`, async ({ page }) => {
179+
const { getTrigger, getListbox, openListbox } = await setup(
180+
page,
181+
'select-hero-test',
182+
);
183+
184+
await openListbox('Enter');
185+
await getTrigger().press('Tab');
186+
await expect(getListbox()).toBeHidden();
187+
await expect(getTrigger()).toHaveAttribute('aria-expanded', 'false');
188+
});
174189
});
175190

176191
test.describe('data-highlighted navigation', () => {

packages/kit-headless/src/components/select/select-trigger.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,17 @@ export const SelectTrigger = component$<SelectTriggerProps>((props) => {
7474
}
7575
});
7676

77+
const handleBlur$ = $(() => {
78+
context.isListboxOpenSig.value = false;
79+
});
80+
7781
return (
7882
<button
7983
{...props}
8084
ref={context.triggerRef}
8185
onClick$={[handleClick$, props.onClick$]}
8286
onKeyDown$={[handleKeyDownSync$, handleKeyDown$, props.onKeyDown$]}
87+
onBlur$={[handleBlur$, props.onBlur$]}
8388
data-open={context.isListboxOpenSig.value ? '' : undefined}
8489
data-closed={!context.isListboxOpenSig.value ? '' : undefined}
8590
aria-expanded={context.isListboxOpenSig.value}

0 commit comments

Comments
 (0)