Skip to content

Commit 72f23bd

Browse files
committed
feat: make tooltips stay open
1 parent f00628f commit 72f23bd

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

src/docs/pages/TooltipsPage.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,19 @@ const TooltipsPage: FC = () => {
5858
</div>
5959
),
6060
},
61+
{
62+
title: 'Stay open and stay closed tooltips',
63+
code: (
64+
<div className="flex gap-2">
65+
<Tooltip isOpen placement="bottom" content="Always open">
66+
<Button>Always open</Button>
67+
</Tooltip>
68+
<Tooltip isOpen={false} placement="bottom" content="Always open">
69+
<Button disabled>Always closed</Button>
70+
</Tooltip>
71+
</div>
72+
),
73+
},
6174
{
6275
title: 'Animation',
6376
code: (

src/lib/components/Floating/Floating.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
} from '@floating-ui/react';
1212
import classNames from 'classnames';
1313
import type { ComponentProps, FC, PropsWithChildren, ReactNode } from 'react';
14-
import { useEffect, useRef, useState } from 'react';
14+
import { useEffect, useMemo, useRef, useState } from 'react';
1515
import { getArrowPlacement, getMiddleware, getPlacement } from '../../helpers/floating';
1616

1717
export interface FlowbiteFloatingTheme {
@@ -47,6 +47,7 @@ export interface FloatingProps extends PropsWithChildren<Omit<ComponentProps<'di
4747
style?: 'dark' | 'light' | 'auto';
4848
theme: FlowbiteFloatingTheme;
4949
trigger?: 'hover' | 'click';
50+
isOpen?: boolean;
5051
}
5152

5253
/**
@@ -63,10 +64,17 @@ export const Floating: FC<FloatingProps> = ({
6364
style = 'dark',
6465
theme,
6566
trigger = 'hover',
67+
isOpen = null,
6668
...props
6769
}) => {
6870
const arrowRef = useRef<HTMLDivElement>(null);
69-
const [open, setOpen] = useState(false);
71+
const [innerOpen, setOpen] = useState(false);
72+
73+
const open = useMemo(() => {
74+
if (isOpen === null) return innerOpen;
75+
76+
return isOpen;
77+
}, [isOpen, innerOpen]);
7078

7179
const floatingTooltip = useFloating<HTMLElement>({
7280
middleware: getMiddleware({ arrowRef, placement }),

src/lib/components/Tooltip/Tooltip.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export interface TooltipProps extends PropsWithChildren<Omit<ComponentProps<'div
1616
style?: 'dark' | 'light' | 'auto';
1717
theme?: DeepPartial<FlowbiteTooltipTheme>;
1818
trigger?: 'hover' | 'click';
19+
isOpen?: boolean;
1920
}
2021

2122
/**

0 commit comments

Comments
 (0)