Skip to content

Commit 581696d

Browse files
feat(dropdown): adds arrow
1 parent 0ff77c3 commit 581696d

File tree

6 files changed

+58
-11
lines changed

6 files changed

+58
-11
lines changed

apps/website/src/routes/docs/headless/dropdown/examples/hero.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export default component$(() => {
2121
<Dropdown.Root data-testid="dropdown">
2222
<Dropdown.Trigger class="dropdown-trigger">Git Settings</Dropdown.Trigger>
2323
<Dropdown.Popover>
24+
<Dropdown.Arrow class="dropdown-arrow" />
2425
<Dropdown.Content class="dropdown-content">
2526
<Dropdown.Group class="dropdown-group">
2627
<Dropdown.GroupLabel class="dropdown-group-label">

apps/website/src/routes/docs/headless/dropdown/snippets/dropdown.css

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
.dropdown-content {
3333
min-width: var(--dropdown-width);
3434
border: 2px dotted black;
35-
margin-top: 0.5rem;
35+
margin-top: 1rem;
3636
flex-direction: column;
3737
display: flex;
3838
row-gap: 0.25rem;
@@ -72,3 +72,36 @@
7272
opacity: 0.6;
7373
background: hsl(var(--foreground) / 0.05);
7474
}
75+
76+
.dropdown-arrow {
77+
width: 100%;
78+
}
79+
80+
.dropdown-arrow:after {
81+
content: '';
82+
position: absolute;
83+
border-style: solid;
84+
border-width: 0 10px 10px;
85+
border-color: #ffffff transparent;
86+
display: block;
87+
top: 8px;
88+
right: 50%;
89+
left: 50%;
90+
transform: translate(-50%, -50%);
91+
width: 0;
92+
z-index: 1;
93+
}
94+
95+
.dropdown-arrow:before {
96+
content: '';
97+
position: absolute;
98+
border-style: dotted;
99+
border-width: 0 15px 15px;
100+
border-color: #000 transparent;
101+
display: block;
102+
top: 8px;
103+
right: 50%;
104+
left: 50%;
105+
transform: translate(-50%, -50%);
106+
z-index: 0;
107+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { PropsOf, Slot, component$ } from '@builder.io/qwik';
2+
3+
import { HPopoverPanelArrow } from '../popover/popover-panel-arrow';
4+
5+
export const HDropdownArrow = component$((props: PropsOf<'div'>) => {
6+
return (
7+
<HPopoverPanelArrow {...props}>
8+
<Slot></Slot>
9+
</HPopoverPanelArrow>
10+
);
11+
});

packages/kit-headless/src/components/dropdown/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ export { HDropdownRadioItem as RadioItem } from './dropdown-radio-item';
1010
export { HDropdownPopover as Popover } from './dropdown-popover';
1111
export { HDropdownGroup as Group } from './dropdown-group';
1212
export { HDropdownGroupLabel as GroupLabel } from './dropdown-group-label';
13+
export { HDropdownArrow as Arrow } from './dropdown-arrow';

packages/kit-headless/src/components/popover/floating.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
import { HPopoverPanelImpl } from './popover-panel-impl';
2-
3-
import { component$, useTask$, Slot, PropsOf, useContext } from '@builder.io/qwik';
41
import {
2+
Placement,
53
ReferenceElement,
6-
autoUpdate,
7-
computePosition,
8-
offset as _offset,
4+
arrow as _arrow,
95
flip as _flip,
10-
shift as _shift,
116
hide as _hide,
12-
arrow as _arrow,
13-
Placement,
7+
offset as _offset,
8+
shift as _shift,
9+
autoUpdate,
10+
computePosition,
1411
} from '@floating-ui/dom';
15-
import { popoverContextId } from './popover-context';
12+
import { PropsOf, Slot, component$, useContext, useTask$ } from '@builder.io/qwik';
13+
14+
import { HPopoverPanelImpl } from './popover-panel-impl';
1615
import { isServer } from '@builder.io/qwik/build';
16+
import { popoverContextId } from './popover-context';
1717

1818
export const FloatingPopover = component$((props: PropsOf<'div'>) => {
1919
const context = useContext(popoverContextId);

packages/kit-headless/src/components/popover/popover-panel-arrow.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { PropsOf, component$, useContext } from '@builder.io/qwik';
2+
23
import { popoverContextId } from './popover-context';
34

45
export const HPopoverPanelArrow = component$((props: PropsOf<'div'>) => {

0 commit comments

Comments
 (0)