Skip to content

Commit f2a7819

Browse files
committed
Implement hover functionality to open and close the dropdown menu and refactor the menu's internal structure for improved styling
1 parent 19d968e commit f2a7819

3 files changed

Lines changed: 42 additions & 22 deletions

File tree

‎packages/ui/src/components/editor/common/DropdownMenu/DropdownMenu.module.scss‎

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
.menu {
22
position: absolute;
3-
top: calc(100% + var(--padding-4px));
3+
top: 100%;
4+
padding-top: 4px;
45
right: 0;
5-
background-color: var(--vscode-quickInput-background);
6-
border-radius: var(--border-radius-8px);
7-
border: 1px solid var(--vscode-widget-border);
8-
box-shadow: 0 0 8px 2px var(--vscode-widget-shadow);
96
z-index: 2;
10-
padding: var(--padding-4px);
117
width: max-content;
128
text-align: left;
139
min-width: 100%;
10+
11+
&__inner {
12+
background-color: var(--vscode-quickInput-background);
13+
border-radius: var(--border-radius-8px);
14+
border: 1px solid var(--vscode-widget-border);
15+
box-shadow: 0 0 8px 2px var(--vscode-widget-shadow);
16+
padding: var(--padding-4px);
17+
}
1418
}
1519

1620
.item {

‎packages/ui/src/components/editor/common/DropdownMenu/DropdownMenu.tsx‎

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,24 @@ export const DropdownMenu: React.FC<DropdownMenu.Props> = (props) => {
2020

2121
return (
2222
<div className={styles.menu}>
23-
{props.items.map((item, index) => (
24-
<div
25-
key={index}
26-
className={styles.item}
27-
onClick={item.on_click}
28-
data-selected={item.is_selected && is_preselection_respected}
29-
onMouseEnter={() => {
30-
set_is_preselection_respected(false)
31-
}}
32-
>
33-
<span>{item.label}</span>
34-
{item.shortcut && (
35-
<span className={styles.shortcut}>{item.shortcut}</span>
36-
)}
37-
</div>
38-
))}
23+
<div className={styles.menu__inner}>
24+
{props.items.map((item, index) => (
25+
<div
26+
key={index}
27+
className={styles.item}
28+
onClick={item.on_click}
29+
data-selected={item.is_selected && is_preselection_respected}
30+
onMouseEnter={() => {
31+
set_is_preselection_respected(false)
32+
}}
33+
>
34+
<span>{item.label}</span>
35+
{item.shortcut && (
36+
<span className={styles.shortcut}>{item.shortcut}</span>
37+
)}
38+
</div>
39+
))}
40+
</div>
3941
</div>
4042
)
4143
}

‎packages/ui/src/components/editor/panel/Dropdown/Dropdown.tsx‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ export const Dropdown = <T extends string>(props: Dropdown.Props<T>) => {
6464
props.on_change(props.options[next_index].value)
6565
}
6666

67+
const handle_mouse_enter = () => {
68+
if (!is_open) {
69+
set_just_opened(true)
70+
}
71+
set_is_open(true)
72+
}
73+
74+
const handle_mouse_leave = () => {
75+
set_is_open(false)
76+
set_just_opened(false)
77+
}
78+
6779
useEffect(() => {
6880
const handle_click_outside = (event: MouseEvent) => {
6981
if (
@@ -86,6 +98,8 @@ export const Dropdown = <T extends string>(props: Dropdown.Props<T>) => {
8698
className={cn(styles.container, { [styles['button--open']]: is_open })}
8799
ref={container_ref}
88100
onWheel={handle_wheel}
101+
onMouseEnter={handle_mouse_enter}
102+
onMouseLeave={handle_mouse_leave}
89103
>
90104
<button
91105
className={cn(styles.button, { [styles['button--open']]: is_open })}

0 commit comments

Comments
 (0)