@@ -22,17 +22,22 @@ export interface OverlayProps extends ComponentPropsWithoutRef<"div"> {
2222 * Callback function triggered when open state changes.
2323 */
2424 onOpenChange ?: ( open : boolean ) => void ;
25- /*
25+ /**
2626 * Set the placement of the Overlay component relative to the trigger element. Defaults to `top`.
2727 */
2828 placement ?: "top" | "bottom" | "left" | "right" ;
29+ /**
30+ * When `true`, the arrow indicator is hidden
31+ */
32+ hideArrow ?: boolean ;
2933}
3034
3135export const Overlay = ( {
3236 children,
3337 open,
3438 onOpenChange,
3539 placement : placementProp = "top" ,
40+ hideArrow = false ,
3641} : OverlayProps ) => {
3742 const arrowRef = useRef < SVGSVGElement | null > ( null ) ;
3843
@@ -48,17 +53,31 @@ export const Overlay = ({
4853 onOpenChange ?.( newOpen ) ;
4954 } ;
5055
56+ const middleware = hideArrow
57+ ? [
58+ offset ( 1 ) ,
59+ flip ( ) ,
60+ {
61+ name : "alignStart" ,
62+ fn ( { rects } : { rects : { reference : { x : number } } } ) {
63+ return { x : rects . reference . x } ;
64+ } ,
65+ } ,
66+ shift ( { limiter : limitShift ( ) } ) ,
67+ ]
68+ : [
69+ offset ( 11 ) ,
70+ flip ( ) ,
71+ shift ( { limiter : limitShift ( ) } ) ,
72+ arrow ( { element : arrowRef } ) ,
73+ ] ;
74+
5175 const { x, y, strategy, context, elements, floating, reference } =
5276 useFloatingUI ( {
5377 open : openState ,
5478 onOpenChange : handleOpenChange ,
5579 placement : placementProp ,
56- middleware : [
57- offset ( 11 ) ,
58- flip ( ) ,
59- shift ( { limiter : limitShift ( ) } ) ,
60- arrow ( { element : arrowRef } ) ,
61- ] ,
80+ middleware,
6281 } ) ;
6382
6483 const { getReferenceProps, getFloatingProps } = useInteractions ( [
@@ -88,7 +107,7 @@ export const Overlay = ({
88107 openState,
89108 floatingStyles,
90109 context,
91- arrowProps,
110+ arrowProps : hideArrow ? undefined : arrowProps ,
92111 floating,
93112 reference,
94113 getFloatingProps,
0 commit comments