|
1 | 1 | import { |
2 | 2 | FloatingArrow, |
3 | 3 | FloatingFocusManager, |
| 4 | + Placement, |
4 | 5 | arrow, |
5 | 6 | autoUpdate, |
6 | 7 | flip, |
@@ -31,20 +32,27 @@ interface NewPopProps { |
31 | 32 | menuContainer?: React.RefObject<HTMLDivElement>; |
32 | 33 | } |
33 | 34 |
|
| 35 | +const CONTAINER_STYLE: { [key in Placement]?: string } = { |
| 36 | + top: styles.contentTop, |
| 37 | + bottom: styles.contentBottom, |
| 38 | +}; |
| 39 | + |
34 | 40 | const PopButton: React.FC<NewPopProps> = ({ Button, Menu, menuContainer }) => { |
35 | 41 | const [isOpen, setIsOpen] = useState(false); |
36 | 42 | const toggle = useCallback(() => setIsOpen((v) => !v), []); |
37 | 43 | const close = useCallback(() => setIsOpen(false), []); |
38 | 44 |
|
39 | 45 | const arrowRef = useRef(null); |
40 | 46 |
|
41 | | - const { x, y, refs, strategy, context } = useFloating({ |
| 47 | + const { x, y, refs, strategy, context, placement } = useFloating({ |
42 | 48 | open: isOpen, |
43 | 49 | onOpenChange: setIsOpen, |
44 | 50 | middleware: [offset(10), flip(), shift(), arrow({ element: arrowRef })], |
45 | 51 | whileElementsMounted: autoUpdate, |
46 | 52 | }); |
47 | 53 |
|
| 54 | + const containerClass = CONTAINER_STYLE[placement] ?? ''; |
| 55 | + |
48 | 56 | const click = useClick(context); |
49 | 57 | const dismiss = useDismiss(context); |
50 | 58 | const role = useRole(context); |
|
0 commit comments