react-tooltpz

💬 Flexible Tooltip Components with zero dependencies

Usage no npm install needed!

<script type="module">
  import reactTooltpz from 'https://cdn.skypack.dev/react-tooltpz';
</script>

README

React Tooltpz

NPM version NPM license NPM total downloads NPM monthly downloads

Low-level component for creating menus, tooltips, hints, dropdown and other popups

💬 Flexible Tooltip Components with zero dependencies

  • Automatically find best position
  • With Portal
  • No extra DOM nodes
  • Tiny

Try demo

Getting Started

  • Basic Usage:

    import { useState } from 'react';
    import { Tooltip } from 'react-tooltpz';
    
    const TitleWithHoverTooltip = ({ title, tooltip }) => {
        const [opened, setOpened] = useState(false);
        const ref = useRef();
    
        return (
            <div ref={ref} onMouseEnter={() => setOpened(true)} onMouseLeave={() => setOpened(false)}>
                {title}
                {opened && (
                    <Tooltip parentRef={ref}>
                        {({ innerRef, style }) => (
                            <div ref={innerRef} style={style}>
                                {tooltip}
                            </div>
                        )}
                    </Tooltip>
                )}
            </div>
        );
    };
    
    export default TitleWithHoverTooltip;
    
  • Installation:

    npm install --save react-tooltpz
    
  • Importing:

    import { Tooltip } from 'react-tooltpz';
    

    You also can import directly what you want

    import Tooltip from 'react-tooltpz/lib/Tooltip';
    import useOutsideClick from 'react-tooltpz/lib/useOutsideClick';
    

API

Tooltip

Compute a tooltip coords and render tooltip with PortalNodeContext and ZIndexContext Prefer this component instead of directly use useTooltip hook

Props

name type default description
parentRef { current: { getBoundingClientRect } } required Tooltip ref object.
It can be any object with current prop.
current prop should be null or any object with getBoundingClientRect method
innerRef { current: { getBoundingClientRect } } - Tooltip ref object.
Similar to parentRef
zIndex number 0 Tooltip default z-index
margin number 4 Margin between parent and tooltip
position 'bottom' / 'top' / 'left' / 'right' 'bottom' Tooltip position
align 'start' / 'center' / 'end' 'start' Tooltip align
children ({ innerRef, style }, { parentRect, tooltipRect } ) => ReactNode - Tooltip render function
style object - Tooltip style object
portalNode HTMLElement - second parameter for ReadDOM.createPortal

Portal

Create a portal with PortalNodeContext. Prefer this component instead of directly use createPortal

Props

name type default description
children ReactNode - first parameter for ReadDOM.createPortal
portalNode HTMLElement - second parameter for ReadDOM.createPortal

PortalNodeContext

provide portalNode to Tooltip and Portal


ZIndexContext

provide zIndex to Tooltip


useTooltip

Compute a tooltip coords

Parameters:

  • parentRef: similar to Tooltip parentRef
  • tooltipRef: similar to Tooltip innerRef
  • options?: { margin?, position?, align? }

Returns array with:

  • coords: { top, left } | null
  • parentRect: { top, left, bottom, right, width, height } | null
  • tooltipRect: { top, left, bottom, right, width, height } | null

useOutsideClick

Handle a click outside of element with portal support

const onMouseDownOrTouchStart = useOutsideClick(onOutsideClick);

Parameters:

  • onOutsideClick?: (event): void - "onOutsideClick" handler

Returns:

  • onMouseDownOrTouchStart: (event): void - onMouseDown or onTouchStart handler