I'm using RadixUI library (https://www.radix-ui.com/primitives/docs/components/tooltip) for my components. The problem is that I'd like to keep the content of my Tooltip in dom
. Currently, it appears only on hover and is rendered in body
element as a last child. What I'd like to obtain is that:
display: none
style)EDIT Currently I have the following
<TooltipProvider delayDuration={0}>
<Tooltip open={open} onOpenChange={setOpen}>
<TooltipTrigger asChild>
<span>{label}</span>
</TooltipTrigger>
<TooltipContent forceMount className={cn(
'z-50 rounded-sm border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
open ? "" : "hidden
)}}>
{content}
</TooltipContent>
</Tooltip>
</TooltipProvider>
The remaining drawback - closing animation does not work with hidden
class. Is it possible to make it works?
open
prop to the Tooltip.Root
:// instead of 'true' you can use any boolean variable
<Tooltip.Root open={true}>
...other stuff
</Tooltip.Root>
This way you will always have your tooltip in the DOM. Hence, you should be able to add any CSS you want.
Tooltip.Portal
and your tooltip will be rendered in the same place as where you've added it in your JSX