Spaces:
Runtime error
Runtime error
File size: 1,531 Bytes
db5855f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import './Tooltip.scss';
import { ReactNode, useState } from 'react';
const sparkClassNames = {
tooltipToggle: 'spark-tooltip-toggle',
tooltip: 'spark-tooltip spark-tooltip-size-m spark-shadow',
tooltipPlacementPrefix: 'spark-tooltip-',
tooltipLabel: 'spark-tooltip-label',
tooltipTip: 'spark-tooltip-tip',
};
type TooltipPlacement = 'top' | 'bottom' | 'right' | 'left' | 'bottom-end';
type TooltipProps = {
content: string | JSX.Element;
children?: ReactNode;
placement?: TooltipPlacement;
className?: string;
};
export const Tooltip = ({ content, children, placement = 'bottom', className = '' }: TooltipProps): JSX.Element => {
const [isHovered, setIsHovered] = useState(false);
const tooltipPlacementClassName =
placement === 'bottom-end'
? `${sparkClassNames.tooltipPlacementPrefix}bottom ${sparkClassNames.tooltipPlacementPrefix}left`
: `${sparkClassNames.tooltipPlacementPrefix}${placement}`;
const tooltipClassNames = [sparkClassNames.tooltip, tooltipPlacementClassName].join(' ');
return (
<div
className={`${sparkClassNames.tooltipToggle} ${className}`}
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
>
{children}
{isHovered && (
<div className={tooltipClassNames}>
<span className={sparkClassNames.tooltipLabel}>{content}</span>
<span className={sparkClassNames.tooltipTip}></span>
</div>
)}
</div>
);
};
|