Tooltip arrow. #4644
Closed
ArtemFedorchuk
started this conversation in
General
Tooltip arrow.
#4644
Replies: 1 comment
-
I've created an example, I can share with you. You can update this example to fit your requirements. import { useTooltipTriggerState } from "react-stately";
import {
TooltipTriggerProps,
mergeProps,
useTooltip,
useTooltipTrigger,
Placement,
useOverlayPosition,
} from "react-aria";
import React from "react";
function TooltipContent({ state, ...props }: any) {
const { tooltipProps } = useTooltip(props, state);
let overlayRef = React.useRef<HTMLDivElement>(null);
let { overlayProps, arrowProps, placement } = useOverlayPosition({
placement: props.placement || "top",
targetRef: props.triggerRef,
overlayRef,
offset: 8,
crossOffset: 0,
isOpen: state.isOpen,
});
return (
<div className="tooltip-content"
{...mergeProps(props, tooltipProps)}
ref={overlayRef}
>
<div className="arrow" {...arrowProps} data-placement={placement}>
<path d="M0 20C0 20 2.06906 19.9829 5.91817 15.4092C7.49986 13.5236 8.97939 12.3809 10.0002 12.3809C11.0202 12.3809 12.481 13.6451 14.0814 15.5472C17.952 20.1437 20 20 20 20H0Z" />
</div>
{props.children}
</div>
);
}
export interface TooltipProps extends TooltipTriggerProps {
delay?: number;
closeDelay?: number;
children: React.ReactNode;
content: React.ReactNode;
placement: Placement;
}
export function Tooltip({
delay = 0,
closeDelay = 0,
children,
...props
}: TooltipProps) {
const ref = React.useRef(null);
const state = useTooltipTriggerState({ ...props, delay, closeDelay });
const { triggerProps, tooltipProps } = useTooltipTrigger(props, state, ref);
return (
<>
{React.isValidElement(children) &&
React.cloneElement<any>(children, {
ref,
...triggerProps,
})}
{state.isOpen && (
<TooltipContent
state={state}
{...mergeProps(tooltipProps, props)}
triggerRef={ref}
>
<div>{props.content}</div>
</TooltipContent>
)}
</>
);
}
examples:
<Tooltip content="Click me" placement="bottom"><Button>Click me</Button></Tooltip> |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
I've tried to create the tooltip with the arrow without using
react-area-components
and I've not found any examples of this( only for the popoverThe documentation for this
useOverlayPosition
is so small(Could you help me with it, and add some examples to the documentation?
Currently, the main issue with the arrow when I chose
placement: 'top'
My component:
Beta Was this translation helpful? Give feedback.
All reactions