react-tooltip
Version:
react tooltip component
176 lines (157 loc) • 5.28 kB
TypeScript
import React, { ElementType, ReactNode, CSSProperties, PropsWithChildren } from 'react';
type PlacesType =
| 'top'
| 'top-start'
| 'top-end'
| 'right'
| 'right-start'
| 'right-end'
| 'bottom'
| 'bottom-start'
| 'bottom-end'
| 'left'
| 'left-start'
| 'left-end'
type VariantType = 'dark' | 'light' | 'success' | 'warning' | 'error' | 'info'
type WrapperType = ElementType | 'div' | 'span'
type ChildrenType = Element | ElementType | ReactNode
type EventsType = 'hover' | 'click'
type PositionStrategy = 'absolute' | 'fixed'
type DataAttribute =
| 'place'
| 'content'
| 'html'
| 'variant'
| 'offset'
| 'wrapper'
| 'events'
| 'position-strategy'
| 'delay-show'
| 'delay-hide'
| 'float'
| 'hidden'
/**
* @description floating-ui middleware
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type Middleware = any
interface IPosition {
x: number
y: number
}
interface ITooltipController {
className?: string
classNameArrow?: string
content?: string
/**
* @deprecated Use `children` or `render` instead
*/
html?: string
render?: (render: { content: string | null; activeAnchor: HTMLElement | null }) => ChildrenType
place?: PlacesType
offset?: number
id?: string
variant?: VariantType
/**
* @deprecated Use the `data-tooltip-id` attribute, or the `anchorSelect` prop instead.
* See https://react-tooltip.com/docs/getting-started
*/
anchorId?: string
anchorSelect?: string
wrapper?: WrapperType
children?: ChildrenType
/**
* @deprecated Use `openOnClick` instead.
*/
events?: EventsType[]
openOnClick?: boolean
positionStrategy?: PositionStrategy
middlewares?: Middleware[]
delayShow?: number
delayHide?: number
float?: boolean
hidden?: boolean
noArrow?: boolean
clickable?: boolean
/**
* @todo refactor to `hideOnEsc` for naming consistency
*/
closeOnEsc?: boolean
/**
* @todo refactor to `hideOnScroll` for naming consistency
*/
closeOnScroll?: boolean
/**
* @todo refactor to `hideOnResize` for naming consistency
*/
closeOnResize?: boolean
style?: CSSProperties
position?: IPosition
isOpen?: boolean
/**
* @description see https://developer.mozilla.org/en-US/docs/Web/CSS/border.
*
* Adding a border with width > 3px, or with `em/cm/rem/...` instead of `px`
* might break the tooltip arrow positioning.
*/
border?: CSSProperties['border']
opacity?: CSSProperties['opacity']
setIsOpen?: (value: boolean) => void
afterShow?: () => void
afterHide?: () => void
}
declare module 'react' {
interface HTMLAttributes<T> extends AriaAttributes, DOMAttributes<T> {
'data-tooltip-id'?: string
'data-tooltip-place'?: PlacesType
'data-tooltip-content'?: string | null
'data-tooltip-html'?: string | null
'data-tooltip-variant'?: VariantType
'data-tooltip-offset'?: number
'data-tooltip-wrapper'?: WrapperType
/**
* @deprecated Use `openOnClick` tooltip prop instead.
*/
'data-tooltip-events'?: EventsType[]
'data-tooltip-position-strategy'?: PositionStrategy
'data-tooltip-delay-show'?: number
'data-tooltip-delay-hide'?: number
'data-tooltip-float'?: boolean
'data-tooltip-hidden'?: boolean
}
}
/**
* @deprecated Use the `data-tooltip-id` attribute, or the `anchorSelect` prop instead.
* See https://react-tooltip.com/docs/getting-started
*/
interface ITooltipWrapper {
tooltipId?: string
children: ReactNode
className?: string
place?: ITooltipController['place']
content?: ITooltipController['content']
html?: ITooltipController['html']
variant?: ITooltipController['variant']
offset?: ITooltipController['offset']
wrapper?: ITooltipController['wrapper']
events?: ITooltipController['events']
positionStrategy?: ITooltipController['positionStrategy']
delayShow?: ITooltipController['delayShow']
delayHide?: ITooltipController['delayHide']
}
declare const TooltipController: ({ id, anchorId, anchorSelect, content, html, render, className, classNameArrow, variant, place, offset, wrapper, children, events, openOnClick, positionStrategy, middlewares, delayShow, delayHide, float, hidden, noArrow, clickable, closeOnEsc, closeOnScroll, closeOnResize, style, position, isOpen, border, opacity, setIsOpen, afterShow, afterHide, }: ITooltipController) => JSX.Element;
/**
* @deprecated Use the `data-tooltip-id` attribute, or the `anchorSelect` prop instead.
* See https://react-tooltip.com/docs/getting-started
*/
declare const TooltipProvider: React.FC<PropsWithChildren<void>>;
/**
* @deprecated Use the `data-tooltip-id` attribute, or the `anchorSelect` prop instead.
* See https://react-tooltip.com/docs/getting-started
*/
declare const TooltipWrapper: ({ tooltipId, children, className, place, content, html, variant, offset, wrapper, events, positionStrategy, delayShow, delayHide, }: ITooltipWrapper) => JSX.Element;
declare function removeStyle({ type, id, }?: {
type?: string;
id?: string;
}): void;
export { ChildrenType, DataAttribute, EventsType, IPosition, ITooltipController as ITooltip, ITooltipWrapper, Middleware, PlacesType, PositionStrategy, TooltipController as Tooltip, TooltipProvider, TooltipWrapper, VariantType, WrapperType, removeStyle };