Package Exports
- react-popper-tooltip
- react-popper-tooltip/dist/styles.css
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-popper-tooltip) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
React Tooltip
React tooltip component based on react-popper.
Example
https://codesandbox.io/s/v04l1ky2rl
Usage
npm install react-popper-tooltipimport React from 'react';
import { render } from 'react-dom';
import TooltipTrigger from 'react-popper-tooltip';
render(
<TooltipTrigger
tooltip={({ getTooltipProps, arrowProps, arrowPlacement }) => (
<div className="tooltip" {...getTooltipProps()}>
<div
className="arrow"
{...arrowProps}
data-placement={arrowPlacement}
/>
{tooltip}
</div>
)}
>
{({ getTriggerProps }) => <span {...getTriggerProps()}>{children}</span>}
</TooltipTrigger>,
document.getElementById('root')
);<TooltipTrigger /> is the only component exposed by the package.
It doesn't render anything itself. It calls the render functions and renders that.
Read more about render prop pattern if you're not familiar with this approach.
Quick start
The package itself doesn't expose any styles and doesn't render anything. To start using it you
have to provide styles and markup for the tooltip to be displayed. You may use default styles from
react-popper-tooltip/styles.css or add your own.
Tooltip.js
import React from 'react';
import TooltipTrigger from "react-popper-tooltip";
import 'react-popper-tooltip/dist/styles.css';
const Tooltip = ({ tooltip, children, ...props }) => (
<TooltipTrigger
{...props}
tooltip={({ getTooltipProps, tooltipRef, arrowStyle, arrowRef, arrowPlacement }) => (
<div className="tooltipContainer" ref={tooltipRef} {...getTooltipProps()}>
<div
className="tooltipArrow"
ref={arrowRef}
style={arrowStyle}
data-placement={arrowPlacement}
/>
{tooltip}
</div>
)}
>
{({ getTriggerProps, triggerRef }) => <span ref={triggerRef} {...getTriggerProps()}>{children}</span>}
</TooltipTrigger>
);
export default Tooltip;Then you can use as shown in the example below.
<Tooltip tooltip="Hi there!" placement="top" trigger="click">Click me</Tooltip>Props
children
function({})| required
This is called with an object. Read more about the properties of this object in the section "Children and tooltip functions".
tooltip
function({})| required
This is called with an object. Read more about the properties of this object in the section "Children and tooltip functions".
defaultTooltipShown
boolean| defaults tofalse
This is the initial visibility state of the tooltip.
tooltipShown
boolean| control prop
Use this prop if you want to control the visibility state of the tooltip.
Package manages its own state internally. You can use this prop to pass the visibility state of the tooltip from the outside.
delayShow
number| defaults to0
Delay in showing the tooltip (ms).
delayHide
number| defaults to0
Delay in hiding the tooltip (ms).
placement
string| defaults toright
The tooltip placement. Valid placements are:
autotoprightbottomleft
Each placement can have a variation from this list:
-start-end
trigger
string| defaults tohover
The event that triggers the tooltip. One of click, hover, right-click, none.
closeOnOutOfBoundaries
boolean| defaults totrue
Whether to close the tooltip when it's trigger is out of the boundary.
modifiers
object
Modifiers passed directly to the underlying popper.js instance. For more information, refer to Popper.js’ modifier docs
Modifiers, applied by default:
{
preventOverflow: {
boundariesElement: 'viewport',
padding: 0
}
}You also have the ability to attach ref to the TooltipTrigger component which exposes following methods for programmatic control of the tooltip:
showTooltip(show immediately)hideTooltip(hide immediately)toggleTooltip(toggle immediately)scheduleShow(show respecting delayShow prop)scheduleHide(hide respecting delayHide prop)scheduleToggle(toggle respecting delayShow and delayHide props)
Children and tooltip functions
This is where you render whatever you want. react-popper-tooltip uses two render props children
and tooltip. Children prop is used to trigger the appearance of the tooltip and tooltip
displays the tooltip itself.
You use it like so:
const tooltip = (
<TooltipTrigger
tooltip={tooltip => (<div>{/* more jsx here */}</div>)}
>
{trigger => (<div>{/* more jsx here */}</div>)}
</TooltipTrigger>
)prop getters
These functions are used to apply props to the elements that you render.
It's advisable to pass all your props to that function rather than applying them on the element
yourself to avoid your props being overridden (or overriding the props returned). For example
<button {...getTriggerProps({ onClick: event => console.log(event))}>Click me</button>
children function
| property | type | description |
|---|---|---|
| getTriggerProps | function({}) |
returns the props you should apply to the trigger element you render. |
| triggerRef | node |
returns the react ref you should apply to the trigger element. |
tooltip function
| property | type | description |
|---|---|---|
| getTooltipProps | function({}) |
returns the props you should apply to the tooltip element you render. |
| tooltipRef | node |
return the react ref you should apply to the tooltip element. |
| arrowStyle | object |
return the styles you should apply to the tooltip arrow style attr. |
| arrowRef | node |
return the react ref you should apply to the tooltip arrow you render. |
| placement | string |
return the placement of the tooltip arrow element. |
Inspiration and Thanks!
This library is based on react-popper, the official react wrapper around Popper.js.
Using of render props, prop getters and doc style of this library are heavily inspired by downshift.