Skip to content

Commit f144689

Browse files
fix(select): will only blur outside of listbox
1 parent f7c199f commit f144689

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { component$, useSignal } from '@builder.io/qwik';
2+
import {
3+
Select,
4+
SelectListbox,
5+
SelectOption,
6+
SelectTrigger,
7+
SelectValue,
8+
} from '@qwik-ui/headless';
9+
10+
export default component$(() => {
11+
const usersSig = useSignal<string[]>(['Tim', 'Ryan', 'Jim', 'Jessie', 'Abby']);
12+
13+
return (
14+
<Select value="Jessie" class="relative min-w-40">
15+
<SelectTrigger class="w-full border-2 border-dashed border-red-400">
16+
<SelectValue placeholder="Select an option" />
17+
</SelectTrigger>
18+
<SelectListbox class="absolute w-full border-2 border-dashed border-green-400 bg-slate-900 p-2">
19+
{usersSig.value.map((user) => (
20+
<SelectOption
21+
class="border-dashed border-blue-400 data-[highlighted]:border-2"
22+
key={user}
23+
>
24+
{user}
25+
</SelectOption>
26+
))}
27+
</SelectListbox>
28+
</Select>
29+
);
30+
});

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

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

77-
const handleBlur$ = $(() => {
78-
context.isListboxOpenSig.value = false;
77+
const handleBlur$ = $((event: FocusEvent) => {
78+
const focusOutsideListbox = !context.listboxRef.value?.contains(
79+
event.relatedTarget as Element,
80+
);
81+
82+
if (focusOutsideListbox) {
83+
context.isListboxOpenSig.value = false;
84+
}
7985
});
8086

8187
return (

0 commit comments

Comments
 (0)