ConceptPortal-public/rsconcept/frontend/src/components/ui/Tooltip.tsx

50 lines
1.1 KiB
TypeScript
Raw Normal View History

'use client';
import clsx from 'clsx';
2023-12-21 00:12:24 +03:00
import { ReactNode } from 'react';
2023-12-07 01:33:34 +03:00
import { createPortal } from 'react-dom';
import { ITooltip, Tooltip as TooltipImpl } from 'react-tooltip';
2023-07-30 16:48:25 +03:00
import { useConceptTheme } from '@/context/ThemeContext';
2023-07-30 16:48:25 +03:00
export type { PlacesType } from 'react-tooltip';
interface TooltipProps extends Omit<ITooltip, 'variant'> {
2023-12-28 14:04:44 +03:00
layer?: string;
text?: string;
2023-07-30 16:48:25 +03:00
}
function Tooltip({
2023-12-28 14:04:44 +03:00
text,
children,
layer = 'z-tooltip',
place = 'bottom',
className,
2023-11-24 18:03:10 +03:00
style,
...restProps
}: TooltipProps) {
2023-07-30 16:48:25 +03:00
const { darkMode } = useConceptTheme();
if (typeof window === 'undefined') {
return null;
}
2023-12-07 01:33:34 +03:00
return createPortal(
<TooltipImpl
2023-12-28 14:04:44 +03:00
delayShow={1000}
delayHide={100}
opacity={0.97}
className={clsx('overflow-hidden', 'border shadow-md', layer, className)}
classNameArrow={layer}
2024-02-22 11:35:27 +03:00
style={{ ...{ paddingTop: '2px', paddingBottom: '2px', overflowX: 'auto', overflowY: 'auto' }, ...style }}
2023-12-28 14:04:44 +03:00
variant={darkMode ? 'dark' : 'light'}
place={place}
{...restProps}
>
{text ? text : null}
{children as ReactNode}
</TooltipImpl>,
2023-12-28 14:04:44 +03:00
document.body
);
2023-07-30 16:48:25 +03:00
}
export default Tooltip;