react-tooltip 5.22.0-beta.1106.0 → 5.22.0-beta.1109.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"react-tooltip.min.mjs","sources":["../src/utils/handle-style.ts","../src/utils/debounce.ts","../src/components/TooltipProvider/TooltipProvider.tsx","../src/components/TooltipProvider/TooltipWrapper.tsx","../src/utils/use-isomorphic-layout-effect.ts","../src/utils/get-scroll-parent.ts","../src/utils/compute-positions.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/TooltipContent/TooltipContent.tsx","../src/components/TooltipController/TooltipController.tsx","../src/index.tsx"],"sourcesContent":["// This is the ID for the core styles of ReactTooltip\nconst REACT_TOOLTIP_CORE_STYLES_ID = 'react-tooltip-core-styles'\n// This is the ID for the visual styles of ReactTooltip\nconst REACT_TOOLTIP_BASE_STYLES_ID = 'react-tooltip-base-styles'\n\nconst injected = {\n core: false,\n base: false,\n}\n\nfunction injectStyle({\n css,\n id = REACT_TOOLTIP_BASE_STYLES_ID,\n type = 'base',\n ref,\n}: {\n css: string\n id?: string\n type?: 'core' | 'base'\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref?: any\n}) {\n if (!css || typeof document === 'undefined' || injected[type]) {\n return\n }\n\n if (\n type === 'core' &&\n typeof process !== 'undefined' && // this validation prevents docs from breaking even with `process?`\n process?.env?.REACT_TOOLTIP_DISABLE_CORE_STYLES\n ) {\n return\n }\n\n if (\n type !== 'base' &&\n typeof process !== 'undefined' && // this validation prevents docs from breaking even with `process?`\n process?.env?.REACT_TOOLTIP_DISABLE_BASE_STYLES\n ) {\n return\n }\n\n if (type === 'core') {\n // eslint-disable-next-line no-param-reassign\n id = REACT_TOOLTIP_CORE_STYLES_ID\n }\n\n if (!ref) {\n // eslint-disable-next-line no-param-reassign\n ref = {}\n }\n const { insertAt } = ref\n\n if (document.getElementById(id)) {\n // this should never happen because of `injected[type]`\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n `[react-tooltip] Element with id '${id}' already exists. Call \\`removeStyle()\\` first`,\n )\n }\n return\n }\n\n const head = document.head || document.getElementsByTagName('head')[0]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const style: any = document.createElement('style')\n style.id = id\n style.type = 'text/css'\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n\n injected[type] = true\n}\n\n/**\n * @deprecated Use the `disableStyleInjection` tooltip prop instead.\n * See https://react-tooltip.com/docs/examples/styling#disabling-reacttooltip-css\n */\nfunction removeStyle({\n type = 'base',\n id = REACT_TOOLTIP_BASE_STYLES_ID,\n}: {\n type?: 'core' | 'base'\n id?: string\n} = {}) {\n if (!injected[type]) {\n return\n }\n\n if (type === 'core') {\n // eslint-disable-next-line no-param-reassign\n id = REACT_TOOLTIP_CORE_STYLES_ID\n }\n\n const style = document.getElementById(id)\n if (style?.tagName === 'style') {\n style?.remove()\n } else if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n `[react-tooltip] Failed to remove 'style' element with id '${id}'. Call \\`injectStyle()\\` first`,\n )\n }\n\n injected[type] = false\n}\n\nexport { injectStyle, removeStyle }\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * This function debounce the received function\n * @param { function } \tfunc\t\t\t\tFunction to be debounced\n * @param { number } \t\twait\t\t\t\tTime to wait before execut the function\n * @param { boolean } \timmediate\t\tParam to define if the function will be executed immediately\n */\nconst debounce = (func: (...args: any[]) => void, wait?: number, immediate?: boolean) => {\n let timeout: NodeJS.Timeout | null = null\n\n return function debounced(this: typeof func, ...args: any[]) {\n const later = () => {\n timeout = null\n if (!immediate) {\n func.apply(this, args)\n }\n }\n\n if (immediate && !timeout) {\n /**\n * there's not need to clear the timeout\n * since we expect it to resolve and set `timeout = null`\n */\n func.apply(this, args)\n timeout = setTimeout(later, wait)\n }\n\n if (!immediate) {\n if (timeout) {\n clearTimeout(timeout)\n }\n timeout = setTimeout(later, wait)\n }\n }\n}\n\nexport default debounce\n","import React, {\n createContext,\n PropsWithChildren,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from 'react'\n\nimport type {\n AnchorRef,\n TooltipContextData,\n TooltipContextDataWrapper,\n} from './TooltipProviderTypes'\n\nconst DEFAULT_TOOLTIP_ID = 'DEFAULT_TOOLTIP_ID'\nconst DEFAULT_CONTEXT_DATA: TooltipContextData = {\n anchorRefs: new Set(),\n activeAnchor: { current: null },\n attach: () => {\n /* attach anchor element */\n },\n detach: () => {\n /* detach anchor element */\n },\n setActiveAnchor: () => {\n /* set active anchor */\n },\n}\n\nconst DEFAULT_CONTEXT_DATA_WRAPPER: TooltipContextDataWrapper = {\n getTooltipData: () => DEFAULT_CONTEXT_DATA,\n}\n\nconst TooltipContext = createContext<TooltipContextDataWrapper>(DEFAULT_CONTEXT_DATA_WRAPPER)\n\n/**\n * @deprecated Use the `data-tooltip-id` attribute, or the `anchorSelect` prop instead.\n * See https://react-tooltip.com/docs/getting-started\n */\nconst TooltipProvider: React.FC<PropsWithChildren<void>> = ({ children }) => {\n const [anchorRefMap, setAnchorRefMap] = useState<Record<string, Set<AnchorRef>>>({\n [DEFAULT_TOOLTIP_ID]: new Set(),\n })\n const [activeAnchorMap, setActiveAnchorMap] = useState<Record<string, AnchorRef>>({\n [DEFAULT_TOOLTIP_ID]: { current: null },\n })\n\n const attach = (tooltipId: string, ...refs: AnchorRef[]) => {\n setAnchorRefMap((oldMap) => {\n const tooltipRefs = oldMap[tooltipId] ?? new Set()\n refs.forEach((ref) => tooltipRefs.add(ref))\n // create new object to trigger re-render\n return { ...oldMap, [tooltipId]: new Set(tooltipRefs) }\n })\n }\n\n const detach = (tooltipId: string, ...refs: AnchorRef[]) => {\n setAnchorRefMap((oldMap) => {\n const tooltipRefs = oldMap[tooltipId]\n if (!tooltipRefs) {\n // tooltip not found\n // maybe thow error?\n return oldMap\n }\n refs.forEach((ref) => tooltipRefs.delete(ref))\n // create new object to trigger re-render\n return { ...oldMap }\n })\n }\n\n const setActiveAnchor = (tooltipId: string, ref: React.RefObject<HTMLElement>) => {\n setActiveAnchorMap((oldMap) => {\n if (oldMap[tooltipId]?.current === ref.current) {\n return oldMap\n }\n // create new object to trigger re-render\n return { ...oldMap, [tooltipId]: ref }\n })\n }\n\n const getTooltipData = useCallback(\n (tooltipId = DEFAULT_TOOLTIP_ID) => ({\n anchorRefs: anchorRefMap[tooltipId] ?? new Set(),\n activeAnchor: activeAnchorMap[tooltipId] ?? { current: null },\n attach: (...refs: AnchorRef[]) => attach(tooltipId, ...refs),\n detach: (...refs: AnchorRef[]) => detach(tooltipId, ...refs),\n setActiveAnchor: (ref: AnchorRef) => setActiveAnchor(tooltipId, ref),\n }),\n [anchorRefMap, activeAnchorMap, attach, detach],\n )\n\n const context = useMemo(() => {\n return {\n getTooltipData,\n }\n }, [getTooltipData])\n\n return <TooltipContext.Provider value={context}>{children}</TooltipContext.Provider>\n}\n\nexport function useTooltip(tooltipId = DEFAULT_TOOLTIP_ID) {\n return useContext(TooltipContext).getTooltipData(tooltipId)\n}\n\nexport default TooltipProvider\n","import React, { useEffect, useRef } from 'react'\nimport classNames from 'classnames'\nimport { useTooltip } from './TooltipProvider'\nimport type { ITooltipWrapper } from './TooltipProviderTypes'\n\n/**\n * @deprecated Use the `data-tooltip-id` attribute, or the `anchorSelect` prop instead.\n * See https://react-tooltip.com/docs/getting-started\n */\nconst TooltipWrapper = ({\n tooltipId,\n children,\n className,\n place,\n content,\n html,\n variant,\n offset,\n wrapper,\n events,\n positionStrategy,\n delayShow,\n delayHide,\n}: ITooltipWrapper) => {\n const { attach, detach } = useTooltip(tooltipId)\n const anchorRef = useRef<HTMLElement | null>(null)\n\n useEffect(() => {\n attach(anchorRef)\n return () => {\n detach(anchorRef)\n }\n }, [])\n\n return (\n <span\n ref={anchorRef}\n className={classNames('react-tooltip-wrapper', className)}\n data-tooltip-place={place}\n data-tooltip-content={content}\n data-tooltip-html={html}\n data-tooltip-variant={variant}\n data-tooltip-offset={offset}\n data-tooltip-wrapper={wrapper}\n data-tooltip-events={events}\n data-tooltip-position-strategy={positionStrategy}\n data-tooltip-delay-show={delayShow}\n data-tooltip-delay-hide={delayHide}\n >\n {children}\n </span>\n )\n}\n\nexport default TooltipWrapper\n","import { useLayoutEffect, useEffect } from 'react'\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\nexport default useIsomorphicLayoutEffect\n","const isScrollable = (node: Element) => {\n if (!(node instanceof HTMLElement || node instanceof SVGElement)) {\n return false\n }\n const style = getComputedStyle(node)\n return ['overflow', 'overflow-x', 'overflow-y'].some((propertyName) => {\n const value = style.getPropertyValue(propertyName)\n return value === 'auto' || value === 'scroll'\n })\n}\n\nexport const getScrollParent = (node: Element | null) => {\n if (!node) {\n return null\n }\n let currentParent = node.parentElement\n while (currentParent) {\n if (isScrollable(currentParent)) {\n return currentParent\n }\n currentParent = currentParent.parentElement\n }\n return document.scrollingElement || document.documentElement\n}\n","import { computePosition, offset, shift, arrow, flip } from '@floating-ui/dom'\nimport type { IComputePositions } from './compute-positions-types'\n\nexport const computeTooltipPosition = async ({\n elementReference = null,\n tooltipReference = null,\n tooltipArrowReference = null,\n place = 'top',\n offset: offsetValue = 10,\n strategy = 'absolute',\n middlewares = [offset(Number(offsetValue)), flip(), shift({ padding: 5 })],\n border,\n}: IComputePositions) => {\n if (!elementReference) {\n // elementReference can be null or undefined and we will not compute the position\n // eslint-disable-next-line no-console\n // console.error('The reference element for tooltip was not defined: ', elementReference)\n return { tooltipStyles: {}, tooltipArrowStyles: {}, place }\n }\n\n if (tooltipReference === null) {\n return { tooltipStyles: {}, tooltipArrowStyles: {}, place }\n }\n\n const middleware = middlewares\n\n if (tooltipArrowReference) {\n middleware.push(arrow({ element: tooltipArrowReference as HTMLElement, padding: 5 }))\n\n return computePosition(elementReference as HTMLElement, tooltipReference as HTMLElement, {\n placement: place,\n strategy,\n middleware,\n }).then(({ x, y, placement, middlewareData }) => {\n const styles = { left: `${x}px`, top: `${y}px`, border }\n\n const { x: arrowX, y: arrowY } = middlewareData.arrow ?? { x: 0, y: 0 }\n\n const staticSide =\n {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[placement.split('-')[0]] ?? 'bottom'\n\n const borderSide = border && {\n borderBottom: border,\n borderRight: border,\n }\n\n let borderWidth = 0\n if (border) {\n const match = `${border}`.match(/(\\d+)px/)\n if (match?.[1]) {\n borderWidth = Number(match[1])\n } else {\n /**\n * this means `border` was set without `width`, or non-px value\n */\n borderWidth = 1\n }\n }\n\n const arrowStyle = {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n ...borderSide,\n [staticSide]: `-${4 + borderWidth}px`,\n }\n\n return { tooltipStyles: styles, tooltipArrowStyles: arrowStyle, place: placement }\n })\n }\n\n return computePosition(elementReference as HTMLElement, tooltipReference as HTMLElement, {\n placement: 'bottom',\n strategy,\n middleware,\n }).then(({ x, y, placement }) => {\n const styles = { left: `${x}px`, top: `${y}px` }\n\n return { tooltipStyles: styles, tooltipArrowStyles: {}, place: placement }\n })\n}\n","import React, { useEffect, useState, useRef, useCallback } from 'react'\nimport { autoUpdate } from '@floating-ui/dom'\nimport classNames from 'classnames'\nimport debounce from 'utils/debounce'\nimport { useTooltip } from 'components/TooltipProvider'\nimport useIsomorphicLayoutEffect from 'utils/use-isomorphic-layout-effect'\nimport { getScrollParent } from 'utils/get-scroll-parent'\nimport { computeTooltipPosition } from 'utils/compute-positions'\nimport coreStyles from './core-styles.module.css'\nimport styles from './styles.module.css'\nimport type { IPosition, ITooltip, PlacesType } from './TooltipTypes'\n\nconst Tooltip = ({\n // props\n id,\n className,\n classNameArrow,\n variant = 'dark',\n anchorId,\n anchorSelect,\n place = 'top',\n offset = 10,\n events = ['hover'],\n openOnClick = false,\n positionStrategy = 'absolute',\n middlewares,\n wrapper: WrapperElement,\n delayShow = 0,\n delayHide = 0,\n float = false,\n hidden = false,\n noArrow = false,\n clickable = false,\n closeOnEsc = false,\n closeOnScroll = false,\n closeOnResize = false,\n style: externalStyles,\n position,\n afterShow,\n afterHide,\n // props handled by controller\n content,\n contentWrapperRef,\n isOpen,\n setIsOpen,\n activeAnchor,\n setActiveAnchor,\n border,\n opacity,\n arrowColor,\n}: ITooltip) => {\n const tooltipRef = useRef<HTMLElement>(null)\n const tooltipArrowRef = useRef<HTMLElement>(null)\n const tooltipShowDelayTimerRef = useRef<NodeJS.Timeout | null>(null)\n const tooltipHideDelayTimerRef = useRef<NodeJS.Timeout | null>(null)\n const [actualPlacement, setActualPlacement] = useState(place)\n const [inlineStyles, setInlineStyles] = useState({})\n const [inlineArrowStyles, setInlineArrowStyles] = useState({})\n const [show, setShow] = useState(false)\n const [rendered, setRendered] = useState(false)\n const wasShowing = useRef(false)\n const lastFloatPosition = useRef<IPosition | null>(null)\n /**\n * @todo Remove this in a future version (provider/wrapper method is deprecated)\n */\n const { anchorRefs, setActiveAnchor: setProviderActiveAnchor } = useTooltip(id)\n const hoveringTooltip = useRef(false)\n const [anchorsBySelect, setAnchorsBySelect] = useState<HTMLElement[]>([])\n const mounted = useRef(false)\n\n const shouldOpenOnClick = openOnClick || events.includes('click')\n\n /**\n * useLayoutEffect runs before useEffect,\n * but should be used carefully because of caveats\n * https://beta.reactjs.org/reference/react/useLayoutEffect#caveats\n */\n useIsomorphicLayoutEffect(() => {\n mounted.current = true\n return () => {\n mounted.current = false\n }\n }, [])\n\n const handleShow = (value: boolean) => {\n if (!mounted.current) {\n return\n }\n if (value) {\n setRendered(true)\n }\n /**\n * wait for the component to render and calculate position\n * before actually showing\n */\n setTimeout(() => {\n if (!mounted.current) {\n return\n }\n setIsOpen?.(value)\n if (isOpen === undefined) {\n setShow(value)\n }\n }, 10)\n }\n\n /**\n * this replicates the effect from `handleShow()`\n * when `isOpen` is changed from outside\n */\n useEffect(() => {\n if (isOpen === undefined) {\n return () => null\n }\n if (isOpen) {\n setRendered(true)\n }\n const timeout = setTimeout(() => {\n setShow(isOpen)\n }, 10)\n return () => {\n clearTimeout(timeout)\n }\n }, [isOpen])\n\n useEffect(() => {\n if (show === wasShowing.current) {\n return\n }\n wasShowing.current = show\n if (show) {\n afterShow?.()\n } else {\n afterHide?.()\n }\n }, [show])\n\n const handleShowTooltipDelayed = () => {\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n\n tooltipShowDelayTimerRef.current = setTimeout(() => {\n handleShow(true)\n }, delayShow)\n }\n\n const handleHideTooltipDelayed = (delay = delayHide) => {\n if (tooltipHideDelayTimerRef.current) {\n clearTimeout(tooltipHideDelayTimerRef.current)\n }\n\n tooltipHideDelayTimerRef.current = setTimeout(() => {\n if (hoveringTooltip.current) {\n return\n }\n handleShow(false)\n }, delay)\n }\n\n const handleShowTooltip = (event?: Event) => {\n if (!event) {\n return\n }\n const target = (event.currentTarget ?? event.target) as HTMLElement | null\n if (!target?.isConnected) {\n /**\n * this happens when the target is removed from the DOM\n * at the same time the tooltip gets triggered\n */\n setActiveAnchor(null)\n setProviderActiveAnchor({ current: null })\n return\n }\n if (delayShow) {\n handleShowTooltipDelayed()\n } else {\n handleShow(true)\n }\n setActiveAnchor(target)\n setProviderActiveAnchor({ current: target })\n\n if (tooltipHideDelayTimerRef.current) {\n clearTimeout(tooltipHideDelayTimerRef.current)\n }\n }\n\n const handleHideTooltip = () => {\n if (clickable) {\n // allow time for the mouse to reach the tooltip, in case there's a gap\n handleHideTooltipDelayed(delayHide || 100)\n } else if (delayHide) {\n handleHideTooltipDelayed()\n } else {\n handleShow(false)\n }\n\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n }\n\n const handleTooltipPosition = ({ x, y }: IPosition) => {\n const virtualElement = {\n getBoundingClientRect() {\n return {\n x,\n y,\n width: 0,\n height: 0,\n top: y,\n left: x,\n right: x,\n bottom: y,\n }\n },\n } as Element\n computeTooltipPosition({\n place,\n offset,\n elementReference: virtualElement,\n tooltipReference: tooltipRef.current,\n tooltipArrowReference: tooltipArrowRef.current,\n strategy: positionStrategy,\n middlewares,\n border,\n }).then((computedStylesData) => {\n if (Object.keys(computedStylesData.tooltipStyles).length) {\n setInlineStyles(computedStylesData.tooltipStyles)\n }\n if (Object.keys(computedStylesData.tooltipArrowStyles).length) {\n setInlineArrowStyles(computedStylesData.tooltipArrowStyles)\n }\n setActualPlacement(computedStylesData.place as PlacesType)\n })\n }\n\n const handleMouseMove = (event?: Event) => {\n if (!event) {\n return\n }\n const mouseEvent = event as MouseEvent\n const mousePosition = {\n x: mouseEvent.clientX,\n y: mouseEvent.clientY,\n }\n handleTooltipPosition(mousePosition)\n lastFloatPosition.current = mousePosition\n }\n\n const handleClickTooltipAnchor = (event?: Event) => {\n handleShowTooltip(event)\n if (delayHide) {\n handleHideTooltipDelayed()\n }\n }\n\n const handleClickOutsideAnchors = (event: MouseEvent) => {\n const anchorById = document.querySelector<HTMLElement>(`[id='${anchorId}']`)\n const anchors = [anchorById, ...anchorsBySelect]\n if (anchors.some((anchor) => anchor?.contains(event.target as HTMLElement))) {\n return\n }\n if (tooltipRef.current?.contains(event.target as HTMLElement)) {\n return\n }\n handleShow(false)\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n }\n\n // debounce handler to prevent call twice when\n // mouse enter and focus events being triggered toggether\n const debouncedHandleShowTooltip = debounce(handleShowTooltip, 50, true)\n const debouncedHandleHideTooltip = debounce(handleHideTooltip, 50, true)\n const updateTooltipPosition = useCallback(() => {\n if (position) {\n // if `position` is set, override regular and `float` positioning\n handleTooltipPosition(position)\n return\n }\n\n if (float) {\n if (lastFloatPosition.current) {\n /*\n Without this, changes to `content`, `place`, `offset`, ..., will only\n trigger a position calculation after a `mousemove` event.\n\n To see why this matters, comment this line, run `yarn dev` and click the\n \"Hover me!\" anchor.\n */\n handleTooltipPosition(lastFloatPosition.current)\n }\n // if `float` is set, override regular positioning\n return\n }\n\n if (!activeAnchor?.isConnected) {\n return\n }\n\n computeTooltipPosition({\n place,\n offset,\n elementReference: activeAnchor,\n tooltipReference: tooltipRef.current,\n tooltipArrowReference: tooltipArrowRef.current,\n strategy: positionStrategy,\n middlewares,\n border,\n }).then((computedStylesData) => {\n if (!mounted.current) {\n // invalidate computed positions after remount\n return\n }\n if (Object.keys(computedStylesData.tooltipStyles).length) {\n setInlineStyles(computedStylesData.tooltipStyles)\n }\n if (Object.keys(computedStylesData.tooltipArrowStyles).length) {\n setInlineArrowStyles(computedStylesData.tooltipArrowStyles)\n }\n setActualPlacement(computedStylesData.place as PlacesType)\n })\n }, [\n show,\n activeAnchor,\n content,\n externalStyles,\n place,\n offset,\n positionStrategy,\n position,\n float,\n ])\n\n useEffect(() => {\n const elementRefs = new Set(anchorRefs)\n\n anchorsBySelect.forEach((anchor) => {\n elementRefs.add({ current: anchor })\n })\n\n const anchorById = document.querySelector<HTMLElement>(`[id='${anchorId}']`)\n if (anchorById) {\n elementRefs.add({ current: anchorById })\n }\n\n const handleScrollResize = () => {\n handleShow(false)\n }\n\n const anchorScrollParent = getScrollParent(activeAnchor)\n const tooltipScrollParent = getScrollParent(tooltipRef.current)\n\n if (closeOnScroll) {\n window.addEventListener('scroll', handleScrollResize)\n anchorScrollParent?.addEventListener('scroll', handleScrollResize)\n tooltipScrollParent?.addEventListener('scroll', handleScrollResize)\n }\n let updateTooltipCleanup: null | (() => void) = null\n if (closeOnResize) {\n window.addEventListener('resize', handleScrollResize)\n } else if (activeAnchor && tooltipRef.current) {\n updateTooltipCleanup = autoUpdate(\n activeAnchor as HTMLElement,\n tooltipRef.current as HTMLElement,\n updateTooltipPosition,\n {\n ancestorResize: true,\n elementResize: true,\n layoutShift: true,\n },\n )\n }\n\n const handleEsc = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') {\n return\n }\n handleShow(false)\n }\n\n if (closeOnEsc) {\n window.addEventListener('keydown', handleEsc)\n }\n\n const enabledEvents: { event: string; listener: (event?: Event) => void }[] = []\n\n if (shouldOpenOnClick) {\n window.addEventListener('click', handleClickOutsideAnchors)\n enabledEvents.push({ event: 'click', listener: handleClickTooltipAnchor })\n } else {\n enabledEvents.push(\n { event: 'mouseenter', listener: debouncedHandleShowTooltip },\n { event: 'mouseleave', listener: debouncedHandleHideTooltip },\n { event: 'focus', listener: debouncedHandleShowTooltip },\n { event: 'blur', listener: debouncedHandleHideTooltip },\n )\n if (float) {\n enabledEvents.push({\n event: 'mousemove',\n listener: handleMouseMove,\n })\n }\n }\n\n const handleMouseEnterTooltip = () => {\n hoveringTooltip.current = true\n }\n const handleMouseLeaveTooltip = () => {\n hoveringTooltip.current = false\n handleHideTooltip()\n }\n\n if (clickable && !shouldOpenOnClick) {\n tooltipRef.current?.addEventListener('mouseenter', handleMouseEnterTooltip)\n tooltipRef.current?.addEventListener('mouseleave', handleMouseLeaveTooltip)\n }\n\n enabledEvents.forEach(({ event, listener }) => {\n elementRefs.forEach((ref) => {\n ref.current?.addEventListener(event, listener)\n })\n })\n\n return () => {\n if (closeOnScroll) {\n window.removeEventListener('scroll', handleScrollResize)\n anchorScrollParent?.removeEventListener('scroll', handleScrollResize)\n tooltipScrollParent?.removeEventListener('scroll', handleScrollResize)\n }\n if (closeOnResize) {\n window.removeEventListener('resize', handleScrollResize)\n } else {\n updateTooltipCleanup?.()\n }\n if (shouldOpenOnClick) {\n window.removeEventListener('click', handleClickOutsideAnchors)\n }\n if (closeOnEsc) {\n window.removeEventListener('keydown', handleEsc)\n }\n if (clickable && !shouldOpenOnClick) {\n tooltipRef.current?.removeEventListener('mouseenter', handleMouseEnterTooltip)\n tooltipRef.current?.removeEventListener('mouseleave', handleMouseLeaveTooltip)\n }\n enabledEvents.forEach(({ event, listener }) => {\n elementRefs.forEach((ref) => {\n ref.current?.removeEventListener(event, listener)\n })\n })\n }\n /**\n * rendered is also a dependency to ensure anchor observers are re-registered\n * since `tooltipRef` becomes stale after removing/adding the tooltip to the DOM\n */\n }, [\n activeAnchor,\n updateTooltipPosition,\n rendered,\n anchorRefs,\n anchorsBySelect,\n closeOnEsc,\n events,\n ])\n\n useEffect(() => {\n let selector = anchorSelect ?? ''\n if (!selector && id) {\n selector = `[data-tooltip-id='${id}']`\n }\n const documentObserverCallback: MutationCallback = (mutationList) => {\n const newAnchors: HTMLElement[] = []\n const removedAnchors: HTMLElement[] = []\n mutationList.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'data-tooltip-id') {\n const newId = (mutation.target as HTMLElement).getAttribute('data-tooltip-id')\n if (newId === id) {\n newAnchors.push(mutation.target as HTMLElement)\n }\n }\n if (mutation.type !== 'childList') {\n return\n }\n if (activeAnchor) {\n const elements = [...mutation.removedNodes].filter((node) => node.nodeType === 1)\n if (selector) {\n try {\n removedAnchors.push(\n // the element itself is an anchor\n ...(elements.filter((element) =>\n (element as HTMLElement).matches(selector),\n ) as HTMLElement[]),\n )\n removedAnchors.push(\n // the element has children which are anchors\n ...elements.flatMap(\n (element) =>\n [...(element as HTMLElement).querySelectorAll(selector)] as HTMLElement[],\n ),\n )\n } catch {\n /**\n * invalid CSS selector.\n * already warned on tooltip controller\n */\n }\n }\n elements.some((node) => {\n if (node?.contains?.(activeAnchor)) {\n setRendered(false)\n handleShow(false)\n setActiveAnchor(null)\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n if (tooltipHideDelayTimerRef.current) {\n clearTimeout(tooltipHideDelayTimerRef.current)\n }\n return true\n }\n return false\n })\n }\n if (!selector) {\n return\n }\n try {\n const elements = [...mutation.addedNodes].filter((node) => node.nodeType === 1)\n newAnchors.push(\n // the element itself is an anchor\n ...(elements.filter((element) =>\n (element as HTMLElement).matches(selector),\n ) as HTMLElement[]),\n )\n newAnchors.push(\n // the element has children which are anchors\n ...elements.flatMap(\n (element) =>\n [...(element as HTMLElement).querySelectorAll(selector)] as HTMLElement[],\n ),\n )\n } catch {\n /**\n * invalid CSS selector.\n * already warned on tooltip controller\n */\n }\n })\n if (newAnchors.length || removedAnchors.length) {\n setAnchorsBySelect((anchors) => [\n ...anchors.filter((anchor) => removedAnchors.includes(anchor)),\n ...newAnchors,\n ])\n }\n }\n const documentObserver = new MutationObserver(documentObserverCallback)\n // watch for anchor being removed from the DOM\n documentObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-tooltip-id'],\n })\n return () => {\n documentObserver.disconnect()\n }\n }, [id, anchorSelect, activeAnchor])\n\n useEffect(() => {\n updateTooltipPosition()\n }, [updateTooltipPosition])\n\n useEffect(() => {\n if (!contentWrapperRef?.current) {\n return () => null\n }\n const contentObserver = new ResizeObserver(() => {\n updateTooltipPosition()\n })\n contentObserver.observe(contentWrapperRef.current)\n return () => {\n contentObserver.disconnect()\n }\n }, [content, contentWrapperRef?.current])\n\n useEffect(() => {\n const anchorById = document.querySelector<HTMLElement>(`[id='${anchorId}']`)\n const anchors = [...anchorsBySelect, anchorById]\n if (!activeAnchor || !anchors.includes(activeAnchor)) {\n /**\n * if there is no active anchor,\n * or if the current active anchor is not amongst the allowed ones,\n * reset it\n */\n setActiveAnchor(anchorsBySelect[0] ?? anchorById)\n }\n }, [anchorId, anchorsBySelect, activeAnchor])\n\n useEffect(() => {\n return () => {\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n if (tooltipHideDelayTimerRef.current) {\n clearTimeout(tooltipHideDelayTimerRef.current)\n }\n }\n }, [])\n\n useEffect(() => {\n let selector = anchorSelect\n if (!selector && id) {\n selector = `[data-tooltip-id='${id}']`\n }\n if (!selector) {\n return\n }\n try {\n const anchors = Array.from(document.querySelectorAll<HTMLElement>(selector))\n setAnchorsBySelect(anchors)\n } catch {\n // warning was already issued in the controller\n setAnchorsBySelect([])\n }\n }, [id, anchorSelect])\n\n const canShow = !hidden && content && show && Object.keys(inlineStyles).length > 0\n\n return rendered ? (\n <WrapperElement\n id={id}\n role=\"tooltip\"\n className={classNames(\n 'react-tooltip',\n coreStyles['tooltip'],\n styles['tooltip'],\n styles[variant],\n className,\n `react-tooltip__place-${actualPlacement}`,\n coreStyles[canShow ? 'show' : 'closing'],\n canShow ? 'react-tooltip__show' : 'react-tooltip__closing',\n positionStrategy === 'fixed' && coreStyles['fixed'],\n clickable && coreStyles['clickable'],\n )}\n onTransitionEnd={(event: TransitionEvent) => {\n /**\n * @warning if `--rt-transition-closing-delay` is set to 0,\n * the tooltip will be stuck (but not visible) on the DOM\n */\n if (show || event.propertyName !== 'opacity') {\n return\n }\n setRendered(false)\n }}\n style={{\n ...externalStyles,\n ...inlineStyles,\n opacity: opacity !== undefined && canShow ? opacity : undefined,\n }}\n ref={tooltipRef}\n >\n {content}\n <WrapperElement\n className={classNames(\n 'react-tooltip-arrow',\n coreStyles['arrow'],\n styles['arrow'],\n classNameArrow,\n noArrow && coreStyles['noArrow'],\n )}\n style={{\n ...inlineArrowStyles,\n background: arrowColor\n ? `linear-gradient(to right bottom, transparent 50%, ${arrowColor} 50%)`\n : undefined,\n }}\n ref={tooltipArrowRef}\n />\n </WrapperElement>\n ) : null\n}\n\nexport default Tooltip\n","/* eslint-disable react/no-danger */\nimport React from 'react'\nimport type { ITooltipContent } from './TooltipContentTypes'\n\nconst TooltipContent = ({ content }: ITooltipContent) => {\n return <span dangerouslySetInnerHTML={{ __html: content }} />\n}\n\nexport default TooltipContent\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Tooltip } from 'components/Tooltip'\nimport type {\n EventsType,\n PositionStrategy,\n PlacesType,\n VariantType,\n WrapperType,\n DataAttribute,\n ITooltip,\n ChildrenType,\n} from 'components/Tooltip/TooltipTypes'\nimport { useTooltip } from 'components/TooltipProvider'\nimport { TooltipContent } from 'components/TooltipContent'\nimport type { ITooltipController } from './TooltipControllerTypes'\n\nconst TooltipController = ({\n id,\n anchorId,\n anchorSelect,\n content,\n html,\n render,\n className,\n classNameArrow,\n variant = 'dark',\n place = 'top',\n offset = 10,\n wrapper = 'div',\n children = null,\n events = ['hover'],\n openOnClick = false,\n positionStrategy = 'absolute',\n middlewares,\n delayShow = 0,\n delayHide = 0,\n float = false,\n hidden = false,\n noArrow = false,\n clickable = false,\n closeOnEsc = false,\n closeOnScroll = false,\n closeOnResize = false,\n style,\n position,\n isOpen,\n disableStyleInjection = false,\n border,\n opacity,\n arrowColor,\n setIsOpen,\n afterShow,\n afterHide,\n}: ITooltipController) => {\n const [tooltipContent, setTooltipContent] = useState(content)\n const [tooltipHtml, setTooltipHtml] = useState(html)\n const [tooltipPlace, setTooltipPlace] = useState(place)\n const [tooltipVariant, setTooltipVariant] = useState(variant)\n const [tooltipOffset, setTooltipOffset] = useState(offset)\n const [tooltipDelayShow, setTooltipDelayShow] = useState(delayShow)\n const [tooltipDelayHide, setTooltipDelayHide] = useState(delayHide)\n const [tooltipFloat, setTooltipFloat] = useState(float)\n const [tooltipHidden, setTooltipHidden] = useState(hidden)\n const [tooltipWrapper, setTooltipWrapper] = useState<WrapperType>(wrapper)\n const [tooltipEvents, setTooltipEvents] = useState(events)\n const [tooltipPositionStrategy, setTooltipPositionStrategy] = useState(positionStrategy)\n const [activeAnchor, setActiveAnchor] = useState<HTMLElement | null>(null)\n const styleInjectionRef = useRef(disableStyleInjection)\n /**\n * @todo Remove this in a future version (provider/wrapper method is deprecated)\n */\n const { anchorRefs, activeAnchor: providerActiveAnchor } = useTooltip(id)\n\n const getDataAttributesFromAnchorElement = (elementReference: HTMLElement) => {\n const dataAttributes = elementReference?.getAttributeNames().reduce((acc, name) => {\n if (name.startsWith('data-tooltip-')) {\n const parsedAttribute = name.replace(/^data-tooltip-/, '') as DataAttribute\n acc[parsedAttribute] = elementReference?.getAttribute(name) ?? null\n }\n return acc\n }, {} as Record<DataAttribute, string | null>)\n\n return dataAttributes\n }\n\n const applyAllDataAttributesFromAnchorElement = (\n dataAttributes: Record<string, string | null>,\n ) => {\n const handleDataAttributes: Record<DataAttribute, (value: string | null) => void> = {\n place: (value) => {\n setTooltipPlace((value as PlacesType) ?? place)\n },\n content: (value) => {\n setTooltipContent(value ?? content)\n },\n html: (value) => {\n setTooltipHtml(value ?? html)\n },\n variant: (value) => {\n setTooltipVariant((value as VariantType) ?? variant)\n },\n offset: (value) => {\n setTooltipOffset(value === null ? offset : Number(value))\n },\n wrapper: (value) => {\n setTooltipWrapper((value as WrapperType) ?? wrapper)\n },\n events: (value) => {\n const parsed = value?.split(' ') as EventsType[]\n setTooltipEvents(parsed ?? events)\n },\n 'position-strategy': (value) => {\n setTooltipPositionStrategy((value as PositionStrategy) ?? positionStrategy)\n },\n 'delay-show': (value) => {\n setTooltipDelayShow(value === null ? delayShow : Number(value))\n },\n 'delay-hide': (value) => {\n setTooltipDelayHide(value === null ? delayHide : Number(value))\n },\n float: (value) => {\n setTooltipFloat(value === null ? float : value === 'true')\n },\n hidden: (value) => {\n setTooltipHidden(value === null ? hidden : value === 'true')\n },\n }\n // reset unset data attributes to default values\n // without this, data attributes from the last active anchor will still be used\n Object.values(handleDataAttributes).forEach((handler) => handler(null))\n Object.entries(dataAttributes).forEach(([key, value]) => {\n handleDataAttributes[key as DataAttribute]?.(value)\n })\n }\n\n useEffect(() => {\n setTooltipContent(content)\n }, [content])\n\n useEffect(() => {\n setTooltipHtml(html)\n }, [html])\n\n useEffect(() => {\n setTooltipPlace(place)\n }, [place])\n\n useEffect(() => {\n setTooltipVariant(variant)\n }, [variant])\n\n useEffect(() => {\n setTooltipOffset(offset)\n }, [offset])\n\n useEffect(() => {\n setTooltipDelayShow(delayShow)\n }, [delayShow])\n\n useEffect(() => {\n setTooltipDelayHide(delayHide)\n }, [delayHide])\n\n useEffect(() => {\n setTooltipFloat(float)\n }, [float])\n\n useEffect(() => {\n setTooltipHidden(hidden)\n }, [hidden])\n\n useEffect(() => {\n setTooltipPositionStrategy(positionStrategy)\n }, [positionStrategy])\n\n useEffect(() => {\n if (styleInjectionRef.current === disableStyleInjection) {\n return\n }\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn('[react-tooltip] Do not change `disableStyleInjection` dynamically.')\n }\n }, [disableStyleInjection])\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('react-tooltip-inject-styles', {\n detail: {\n disableCore: disableStyleInjection === 'core',\n disableBase: disableStyleInjection,\n },\n }),\n )\n }\n }, [])\n\n useEffect(() => {\n const elementRefs = new Set(anchorRefs)\n\n let selector = anchorSelect\n if (!selector && id) {\n selector = `[data-tooltip-id='${id}']`\n }\n if (selector) {\n try {\n const anchorsBySelect = document.querySelectorAll<HTMLElement>(selector)\n anchorsBySelect.forEach((anchor) => {\n elementRefs.add({ current: anchor })\n })\n } catch {\n if (!process.env.NODE_ENV || process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`[react-tooltip] \"${selector}\" is not a valid CSS selector`)\n }\n }\n }\n\n const anchorById = document.querySelector<HTMLElement>(`[id='${anchorId}']`)\n if (anchorById) {\n elementRefs.add({ current: anchorById })\n }\n\n if (!elementRefs.size) {\n return () => null\n }\n\n const anchorElement = activeAnchor ?? anchorById ?? providerActiveAnchor.current\n\n const observerCallback: MutationCallback = (mutationList) => {\n mutationList.forEach((mutation) => {\n if (\n !anchorElement ||\n mutation.type !== 'attributes' ||\n !mutation.attributeName?.startsWith('data-tooltip-')\n ) {\n return\n }\n // make sure to get all set attributes, since all unset attributes are reset\n const dataAttributes = getDataAttributesFromAnchorElement(anchorElement)\n applyAllDataAttributesFromAnchorElement(dataAttributes)\n })\n }\n\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(observerCallback)\n\n // do not check for subtree and childrens, we only want to know attribute changes\n // to stay watching `data-attributes-*` from anchor element\n const observerConfig = { attributes: true, childList: false, subtree: false }\n\n if (anchorElement) {\n const dataAttributes = getDataAttributesFromAnchorElement(anchorElement)\n applyAllDataAttributesFromAnchorElement(dataAttributes)\n // Start observing the target node for configured mutations\n observer.observe(anchorElement, observerConfig)\n }\n\n return () => {\n // Remove the observer when the tooltip is destroyed\n observer.disconnect()\n }\n }, [anchorRefs, providerActiveAnchor, activeAnchor, anchorId, anchorSelect])\n\n useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return\n }\n if (style?.border) {\n // eslint-disable-next-line no-console\n console.warn('[react-tooltip] Do not set `style.border`. Use `border` prop instead.')\n }\n if (border && !CSS.supports('border', `${border}`)) {\n // eslint-disable-next-line no-console\n console.warn(`[react-tooltip] \"${border}\" is not a valid \\`border\\`.`)\n }\n if (style?.opacity) {\n // eslint-disable-next-line no-console\n console.warn('[react-tooltip] Do not set `style.opacity`. Use `opacity` prop instead.')\n }\n if (opacity && !CSS.supports('opacity', `${opacity}`)) {\n // eslint-disable-next-line no-console\n console.warn(`[react-tooltip] \"${opacity}\" is not a valid \\`opacity\\`.`)\n }\n }, [])\n\n /**\n * content priority: children < render or content < html\n * children should be lower priority so that it can be used as the \"default\" content\n */\n let renderedContent: ChildrenType = children\n const contentWrapperRef = useRef<HTMLDivElement>(null)\n if (render) {\n const rendered = render({ content: tooltipContent ?? null, activeAnchor }) as React.ReactNode\n renderedContent = rendered ? (\n <div ref={contentWrapperRef} className=\"react-tooltip-content-wrapper\">\n {rendered}\n </div>\n ) : null\n } else if (tooltipContent) {\n renderedContent = tooltipContent\n }\n if (tooltipHtml) {\n renderedContent = <TooltipContent content={tooltipHtml} />\n }\n\n const props: ITooltip = {\n id,\n anchorId,\n anchorSelect,\n className,\n classNameArrow,\n content: renderedContent,\n contentWrapperRef,\n place: tooltipPlace,\n variant: tooltipVariant,\n offset: tooltipOffset,\n wrapper: tooltipWrapper,\n events: tooltipEvents,\n openOnClick,\n positionStrategy: tooltipPositionStrategy,\n middlewares,\n delayShow: tooltipDelayShow,\n delayHide: tooltipDelayHide,\n float: tooltipFloat,\n hidden: tooltipHidden,\n noArrow,\n clickable,\n closeOnEsc,\n closeOnScroll,\n closeOnResize,\n style,\n position,\n isOpen,\n border,\n opacity,\n arrowColor,\n setIsOpen,\n afterShow,\n afterHide,\n activeAnchor,\n setActiveAnchor: (anchor: HTMLElement | null) => setActiveAnchor(anchor),\n }\n\n return <Tooltip {...props} />\n}\n\nexport default TooltipController\n","import './tokens.css'\n\nimport { injectStyle } from 'utils/handle-style'\n\nimport type {\n ChildrenType,\n DataAttribute,\n EventsType,\n PlacesType,\n PositionStrategy,\n VariantType,\n WrapperType,\n IPosition,\n Middleware,\n} from './components/Tooltip/TooltipTypes'\nimport type { ITooltipController } from './components/TooltipController/TooltipControllerTypes'\nimport type { ITooltipWrapper } from './components/TooltipProvider/TooltipProviderTypes'\n\n// those content will be replaced in build time with the `react-tooltip.css` builded content\nconst TooltipCoreStyles = 'react-tooltip-core-css-placeholder'\nconst TooltipStyles = 'react-tooltip-css-placeholder'\n\nif (typeof window !== 'undefined') {\n window.addEventListener('react-tooltip-inject-styles', ((\n event: CustomEvent<{ disableCore: boolean; disableBase: boolean }>,\n ) => {\n if (!event.detail.disableCore) {\n injectStyle({ css: TooltipCoreStyles, type: 'core' })\n }\n if (!event.detail.disableBase) {\n injectStyle({ css: TooltipStyles, type: 'base' })\n }\n }) as EventListener)\n}\n\nexport { TooltipController as Tooltip } from './components/TooltipController'\nexport { TooltipProvider, TooltipWrapper } from './components/TooltipProvider'\nexport type {\n ChildrenType,\n DataAttribute,\n EventsType,\n PlacesType,\n PositionStrategy,\n VariantType,\n WrapperType,\n ITooltipController as ITooltip,\n ITooltipWrapper,\n IPosition,\n Middleware,\n}\n\nexport { removeStyle } from './utils/handle-style'\n"],"names":["REACT_TOOLTIP_CORE_STYLES_ID","REACT_TOOLTIP_BASE_STYLES_ID","injected","core","base","injectStyle","css","id","type","ref","document","process","_a","env","REACT_TOOLTIP_DISABLE_CORE_STYLES","_b","REACT_TOOLTIP_DISABLE_BASE_STYLES","insertAt","getElementById","console","warn","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","removeStyle","tagName","remove","debounce","func","wait","immediate","timeout","args","later","apply","this","setTimeout","clearTimeout","DEFAULT_TOOLTIP_ID","DEFAULT_CONTEXT_DATA","anchorRefs","Set","activeAnchor","current","attach","detach","setActiveAnchor","TooltipContext","createContext","getTooltipData","TooltipProvider","children","anchorRefMap","setAnchorRefMap","useState","activeAnchorMap","setActiveAnchorMap","tooltipId","refs","oldMap","tooltipRefs","forEach","add","delete","useCallback","context","useMemo","React","Provider","value","useTooltip","useContext","TooltipWrapper","className","place","content","html","variant","offset","wrapper","events","positionStrategy","delayShow","delayHide","anchorRef","useRef","useEffect","classNames","useIsomorphicLayoutEffect","window","useLayoutEffect","isScrollable","node","HTMLElement","SVGElement","getComputedStyle","some","propertyName","getPropertyValue","getScrollParent","currentParent","parentElement","scrollingElement","documentElement","computeTooltipPosition","async","elementReference","tooltipReference","tooltipArrowReference","offsetValue","strategy","middlewares","Number","flip","shift","padding","border","tooltipStyles","tooltipArrowStyles","middleware","push","arrow","element","computePosition","placement","then","x","y","middlewareData","styles","left","top","arrowX","arrowY","staticSide","right","bottom","split","borderSide","borderBottom","borderRight","borderWidth","match","Tooltip","classNameArrow","anchorId","anchorSelect","openOnClick","WrapperElement","float","hidden","noArrow","clickable","closeOnEsc","closeOnScroll","closeOnResize","externalStyles","position","afterShow","afterHide","contentWrapperRef","isOpen","setIsOpen","opacity","arrowColor","tooltipRef","tooltipArrowRef","tooltipShowDelayTimerRef","tooltipHideDelayTimerRef","actualPlacement","setActualPlacement","inlineStyles","setInlineStyles","inlineArrowStyles","setInlineArrowStyles","show","setShow","rendered","setRendered","wasShowing","lastFloatPosition","setProviderActiveAnchor","hoveringTooltip","anchorsBySelect","setAnchorsBySelect","mounted","shouldOpenOnClick","includes","handleShow","undefined","handleHideTooltipDelayed","delay","handleShowTooltip","event","target","currentTarget","isConnected","handleHideTooltip","handleTooltipPosition","getBoundingClientRect","width","height","computedStylesData","Object","keys","length","handleMouseMove","mouseEvent","mousePosition","clientX","clientY","handleClickTooltipAnchor","handleClickOutsideAnchors","querySelector","anchor","contains","debouncedHandleShowTooltip","debouncedHandleHideTooltip","updateTooltipPosition","elementRefs","anchorById","handleScrollResize","anchorScrollParent","tooltipScrollParent","addEventListener","updateTooltipCleanup","autoUpdate","ancestorResize","elementResize","layoutShift","handleEsc","key","enabledEvents","listener","handleMouseEnterTooltip","handleMouseLeaveTooltip","removeEventListener","selector","documentObserver","MutationObserver","mutationList","newAnchors","removedAnchors","mutation","attributeName","getAttribute","elements","removedNodes","filter","nodeType","matches","flatMap","querySelectorAll","call","addedNodes","anchors","observe","body","childList","subtree","attributes","attributeFilter","disconnect","contentObserver","ResizeObserver","Array","from","canShow","role","coreStyles","onTransitionEnd","background","TooltipContent","dangerouslySetInnerHTML","__html","TooltipController","render","disableStyleInjection","tooltipContent","setTooltipContent","tooltipHtml","setTooltipHtml","tooltipPlace","setTooltipPlace","tooltipVariant","setTooltipVariant","tooltipOffset","setTooltipOffset","tooltipDelayShow","setTooltipDelayShow","tooltipDelayHide","setTooltipDelayHide","tooltipFloat","setTooltipFloat","tooltipHidden","setTooltipHidden","tooltipWrapper","setTooltipWrapper","tooltipEvents","setTooltipEvents","tooltipPositionStrategy","setTooltipPositionStrategy","styleInjectionRef","providerActiveAnchor","getDataAttributesFromAnchorElement","getAttributeNames","reduce","acc","name","startsWith","replace","applyAllDataAttributesFromAnchorElement","dataAttributes","handleDataAttributes","parsed","values","handler","entries","dispatchEvent","CustomEvent","detail","disableCore","disableBase","size","anchorElement","observer","observerConfig","CSS","supports","renderedContent","props"],"mappings":"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"}
1
+ {"version":3,"file":"react-tooltip.min.mjs","sources":["../src/utils/handle-style.ts","../src/utils/debounce.ts","../src/components/TooltipProvider/TooltipProvider.tsx","../src/components/TooltipProvider/TooltipWrapper.tsx","../src/utils/use-isomorphic-layout-effect.ts","../src/utils/get-scroll-parent.ts","../src/utils/compute-positions.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/TooltipContent/TooltipContent.tsx","../src/components/TooltipController/TooltipController.tsx","../src/index.tsx"],"sourcesContent":["// This is the ID for the core styles of ReactTooltip\nconst REACT_TOOLTIP_CORE_STYLES_ID = 'react-tooltip-core-styles'\n// This is the ID for the visual styles of ReactTooltip\nconst REACT_TOOLTIP_BASE_STYLES_ID = 'react-tooltip-base-styles'\n\nconst injected = {\n core: false,\n base: false,\n}\n\nfunction injectStyle({\n css,\n id = REACT_TOOLTIP_BASE_STYLES_ID,\n type = 'base',\n ref,\n}: {\n css: string\n id?: string\n type?: 'core' | 'base'\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref?: any\n}) {\n if (!css || typeof document === 'undefined' || injected[type]) {\n return\n }\n\n if (\n type === 'core' &&\n typeof process !== 'undefined' && // this validation prevents docs from breaking even with `process?`\n process?.env?.REACT_TOOLTIP_DISABLE_CORE_STYLES\n ) {\n return\n }\n\n if (\n type !== 'base' &&\n typeof process !== 'undefined' && // this validation prevents docs from breaking even with `process?`\n process?.env?.REACT_TOOLTIP_DISABLE_BASE_STYLES\n ) {\n return\n }\n\n if (type === 'core') {\n // eslint-disable-next-line no-param-reassign\n id = REACT_TOOLTIP_CORE_STYLES_ID\n }\n\n if (!ref) {\n // eslint-disable-next-line no-param-reassign\n ref = {}\n }\n const { insertAt } = ref\n\n if (document.getElementById(id)) {\n // this should never happen because of `injected[type]`\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n `[react-tooltip] Element with id '${id}' already exists. Call \\`removeStyle()\\` first`,\n )\n }\n return\n }\n\n const head = document.head || document.getElementsByTagName('head')[0]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const style: any = document.createElement('style')\n style.id = id\n style.type = 'text/css'\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n\n injected[type] = true\n}\n\n/**\n * @deprecated Use the `disableStyleInjection` tooltip prop instead.\n * See https://react-tooltip.com/docs/examples/styling#disabling-reacttooltip-css\n */\nfunction removeStyle({\n type = 'base',\n id = REACT_TOOLTIP_BASE_STYLES_ID,\n}: {\n type?: 'core' | 'base'\n id?: string\n} = {}) {\n if (!injected[type]) {\n return\n }\n\n if (type === 'core') {\n // eslint-disable-next-line no-param-reassign\n id = REACT_TOOLTIP_CORE_STYLES_ID\n }\n\n const style = document.getElementById(id)\n if (style?.tagName === 'style') {\n style?.remove()\n } else if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n `[react-tooltip] Failed to remove 'style' element with id '${id}'. Call \\`injectStyle()\\` first`,\n )\n }\n\n injected[type] = false\n}\n\nexport { injectStyle, removeStyle }\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * This function debounce the received function\n * @param { function } \tfunc\t\t\t\tFunction to be debounced\n * @param { number } \t\twait\t\t\t\tTime to wait before execut the function\n * @param { boolean } \timmediate\t\tParam to define if the function will be executed immediately\n */\nconst debounce = (func: (...args: any[]) => void, wait?: number, immediate?: boolean) => {\n let timeout: NodeJS.Timeout | null = null\n\n return function debounced(this: typeof func, ...args: any[]) {\n const later = () => {\n timeout = null\n if (!immediate) {\n func.apply(this, args)\n }\n }\n\n if (immediate && !timeout) {\n /**\n * there's not need to clear the timeout\n * since we expect it to resolve and set `timeout = null`\n */\n func.apply(this, args)\n timeout = setTimeout(later, wait)\n }\n\n if (!immediate) {\n if (timeout) {\n clearTimeout(timeout)\n }\n timeout = setTimeout(later, wait)\n }\n }\n}\n\nexport default debounce\n","import React, {\n createContext,\n PropsWithChildren,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from 'react'\n\nimport type {\n AnchorRef,\n TooltipContextData,\n TooltipContextDataWrapper,\n} from './TooltipProviderTypes'\n\nconst DEFAULT_TOOLTIP_ID = 'DEFAULT_TOOLTIP_ID'\nconst DEFAULT_CONTEXT_DATA: TooltipContextData = {\n anchorRefs: new Set(),\n activeAnchor: { current: null },\n attach: () => {\n /* attach anchor element */\n },\n detach: () => {\n /* detach anchor element */\n },\n setActiveAnchor: () => {\n /* set active anchor */\n },\n}\n\nconst DEFAULT_CONTEXT_DATA_WRAPPER: TooltipContextDataWrapper = {\n getTooltipData: () => DEFAULT_CONTEXT_DATA,\n}\n\nconst TooltipContext = createContext<TooltipContextDataWrapper>(DEFAULT_CONTEXT_DATA_WRAPPER)\n\n/**\n * @deprecated Use the `data-tooltip-id` attribute, or the `anchorSelect` prop instead.\n * See https://react-tooltip.com/docs/getting-started\n */\nconst TooltipProvider: React.FC<PropsWithChildren<void>> = ({ children }) => {\n const [anchorRefMap, setAnchorRefMap] = useState<Record<string, Set<AnchorRef>>>({\n [DEFAULT_TOOLTIP_ID]: new Set(),\n })\n const [activeAnchorMap, setActiveAnchorMap] = useState<Record<string, AnchorRef>>({\n [DEFAULT_TOOLTIP_ID]: { current: null },\n })\n\n const attach = (tooltipId: string, ...refs: AnchorRef[]) => {\n setAnchorRefMap((oldMap) => {\n const tooltipRefs = oldMap[tooltipId] ?? new Set()\n refs.forEach((ref) => tooltipRefs.add(ref))\n // create new object to trigger re-render\n return { ...oldMap, [tooltipId]: new Set(tooltipRefs) }\n })\n }\n\n const detach = (tooltipId: string, ...refs: AnchorRef[]) => {\n setAnchorRefMap((oldMap) => {\n const tooltipRefs = oldMap[tooltipId]\n if (!tooltipRefs) {\n // tooltip not found\n // maybe thow error?\n return oldMap\n }\n refs.forEach((ref) => tooltipRefs.delete(ref))\n // create new object to trigger re-render\n return { ...oldMap }\n })\n }\n\n const setActiveAnchor = (tooltipId: string, ref: React.RefObject<HTMLElement>) => {\n setActiveAnchorMap((oldMap) => {\n if (oldMap[tooltipId]?.current === ref.current) {\n return oldMap\n }\n // create new object to trigger re-render\n return { ...oldMap, [tooltipId]: ref }\n })\n }\n\n const getTooltipData = useCallback(\n (tooltipId = DEFAULT_TOOLTIP_ID) => ({\n anchorRefs: anchorRefMap[tooltipId] ?? new Set(),\n activeAnchor: activeAnchorMap[tooltipId] ?? { current: null },\n attach: (...refs: AnchorRef[]) => attach(tooltipId, ...refs),\n detach: (...refs: AnchorRef[]) => detach(tooltipId, ...refs),\n setActiveAnchor: (ref: AnchorRef) => setActiveAnchor(tooltipId, ref),\n }),\n [anchorRefMap, activeAnchorMap, attach, detach],\n )\n\n const context = useMemo(() => {\n return {\n getTooltipData,\n }\n }, [getTooltipData])\n\n return <TooltipContext.Provider value={context}>{children}</TooltipContext.Provider>\n}\n\nexport function useTooltip(tooltipId = DEFAULT_TOOLTIP_ID) {\n return useContext(TooltipContext).getTooltipData(tooltipId)\n}\n\nexport default TooltipProvider\n","import React, { useEffect, useRef } from 'react'\nimport classNames from 'classnames'\nimport { useTooltip } from './TooltipProvider'\nimport type { ITooltipWrapper } from './TooltipProviderTypes'\n\n/**\n * @deprecated Use the `data-tooltip-id` attribute, or the `anchorSelect` prop instead.\n * See https://react-tooltip.com/docs/getting-started\n */\nconst TooltipWrapper = ({\n tooltipId,\n children,\n className,\n place,\n content,\n html,\n variant,\n offset,\n wrapper,\n events,\n positionStrategy,\n delayShow,\n delayHide,\n}: ITooltipWrapper) => {\n const { attach, detach } = useTooltip(tooltipId)\n const anchorRef = useRef<HTMLElement | null>(null)\n\n useEffect(() => {\n attach(anchorRef)\n return () => {\n detach(anchorRef)\n }\n }, [])\n\n return (\n <span\n ref={anchorRef}\n className={classNames('react-tooltip-wrapper', className)}\n data-tooltip-place={place}\n data-tooltip-content={content}\n data-tooltip-html={html}\n data-tooltip-variant={variant}\n data-tooltip-offset={offset}\n data-tooltip-wrapper={wrapper}\n data-tooltip-events={events}\n data-tooltip-position-strategy={positionStrategy}\n data-tooltip-delay-show={delayShow}\n data-tooltip-delay-hide={delayHide}\n >\n {children}\n </span>\n )\n}\n\nexport default TooltipWrapper\n","import { useLayoutEffect, useEffect } from 'react'\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\nexport default useIsomorphicLayoutEffect\n","const isScrollable = (node: Element) => {\n if (!(node instanceof HTMLElement || node instanceof SVGElement)) {\n return false\n }\n const style = getComputedStyle(node)\n return ['overflow', 'overflow-x', 'overflow-y'].some((propertyName) => {\n const value = style.getPropertyValue(propertyName)\n return value === 'auto' || value === 'scroll'\n })\n}\n\nexport const getScrollParent = (node: Element | null) => {\n if (!node) {\n return null\n }\n let currentParent = node.parentElement\n while (currentParent) {\n if (isScrollable(currentParent)) {\n return currentParent\n }\n currentParent = currentParent.parentElement\n }\n return document.scrollingElement || document.documentElement\n}\n","import { computePosition, offset, shift, arrow, flip } from '@floating-ui/dom'\nimport type { IComputePositions } from './compute-positions-types'\n\nexport const computeTooltipPosition = async ({\n elementReference = null,\n tooltipReference = null,\n tooltipArrowReference = null,\n place = 'top',\n offset: offsetValue = 10,\n strategy = 'absolute',\n middlewares = [offset(Number(offsetValue)), flip(), shift({ padding: 5 })],\n border,\n}: IComputePositions) => {\n if (!elementReference) {\n // elementReference can be null or undefined and we will not compute the position\n // eslint-disable-next-line no-console\n // console.error('The reference element for tooltip was not defined: ', elementReference)\n return { tooltipStyles: {}, tooltipArrowStyles: {}, place }\n }\n\n if (tooltipReference === null) {\n return { tooltipStyles: {}, tooltipArrowStyles: {}, place }\n }\n\n const middleware = middlewares\n\n if (tooltipArrowReference) {\n middleware.push(arrow({ element: tooltipArrowReference as HTMLElement, padding: 5 }))\n\n return computePosition(elementReference as HTMLElement, tooltipReference as HTMLElement, {\n placement: place,\n strategy,\n middleware,\n }).then(({ x, y, placement, middlewareData }) => {\n const styles = { left: `${x}px`, top: `${y}px`, border }\n\n const { x: arrowX, y: arrowY } = middlewareData.arrow ?? { x: 0, y: 0 }\n\n const staticSide =\n {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[placement.split('-')[0]] ?? 'bottom'\n\n const borderSide = border && {\n borderBottom: border,\n borderRight: border,\n }\n\n let borderWidth = 0\n if (border) {\n const match = `${border}`.match(/(\\d+)px/)\n if (match?.[1]) {\n borderWidth = Number(match[1])\n } else {\n /**\n * this means `border` was set without `width`, or non-px value\n */\n borderWidth = 1\n }\n }\n\n const arrowStyle = {\n left: arrowX != null ? `${arrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n ...borderSide,\n [staticSide]: `-${4 + borderWidth}px`,\n }\n\n return { tooltipStyles: styles, tooltipArrowStyles: arrowStyle, place: placement }\n })\n }\n\n return computePosition(elementReference as HTMLElement, tooltipReference as HTMLElement, {\n placement: 'bottom',\n strategy,\n middleware,\n }).then(({ x, y, placement }) => {\n const styles = { left: `${x}px`, top: `${y}px` }\n\n return { tooltipStyles: styles, tooltipArrowStyles: {}, place: placement }\n })\n}\n","import React, { useEffect, useState, useRef, useCallback, useImperativeHandle } from 'react'\nimport { autoUpdate } from '@floating-ui/dom'\nimport classNames from 'classnames'\nimport debounce from 'utils/debounce'\nimport { useTooltip } from 'components/TooltipProvider'\nimport useIsomorphicLayoutEffect from 'utils/use-isomorphic-layout-effect'\nimport { getScrollParent } from 'utils/get-scroll-parent'\nimport { computeTooltipPosition } from 'utils/compute-positions'\nimport coreStyles from './core-styles.module.css'\nimport styles from './styles.module.css'\nimport type { IPosition, ITooltip, PlacesType, TooltipImperativeOpenOptions } from './TooltipTypes'\n\nconst Tooltip = ({\n // props\n forwardRef,\n id,\n className,\n classNameArrow,\n variant = 'dark',\n anchorId,\n anchorSelect,\n place = 'top',\n offset = 10,\n events = ['hover'],\n openOnClick = false,\n positionStrategy = 'absolute',\n middlewares,\n wrapper: WrapperElement,\n delayShow = 0,\n delayHide = 0,\n float = false,\n hidden = false,\n noArrow = false,\n clickable = false,\n closeOnEsc = false,\n closeOnScroll = false,\n closeOnResize = false,\n style: externalStyles,\n position,\n afterShow,\n afterHide,\n // props handled by controller\n content,\n contentWrapperRef,\n isOpen,\n setIsOpen,\n activeAnchor,\n setActiveAnchor,\n border,\n opacity,\n arrowColor,\n}: ITooltip) => {\n const tooltipRef = useRef<HTMLElement>(null)\n const tooltipArrowRef = useRef<HTMLElement>(null)\n const tooltipShowDelayTimerRef = useRef<NodeJS.Timeout | null>(null)\n const tooltipHideDelayTimerRef = useRef<NodeJS.Timeout | null>(null)\n const [actualPlacement, setActualPlacement] = useState(place)\n const [inlineStyles, setInlineStyles] = useState({})\n const [inlineArrowStyles, setInlineArrowStyles] = useState({})\n const [show, setShow] = useState(false)\n const [rendered, setRendered] = useState(false)\n const [imperativeOptions, setImperativeOptions] = useState<TooltipImperativeOpenOptions | null>(\n null,\n )\n const wasShowing = useRef(false)\n const lastFloatPosition = useRef<IPosition | null>(null)\n /**\n * @todo Remove this in a future version (provider/wrapper method is deprecated)\n */\n const { anchorRefs, setActiveAnchor: setProviderActiveAnchor } = useTooltip(id)\n const hoveringTooltip = useRef(false)\n const [anchorsBySelect, setAnchorsBySelect] = useState<HTMLElement[]>([])\n const mounted = useRef(false)\n\n const shouldOpenOnClick = openOnClick || events.includes('click')\n\n /**\n * useLayoutEffect runs before useEffect,\n * but should be used carefully because of caveats\n * https://beta.reactjs.org/reference/react/useLayoutEffect#caveats\n */\n useIsomorphicLayoutEffect(() => {\n mounted.current = true\n return () => {\n mounted.current = false\n }\n }, [])\n\n useEffect(() => {\n if (!show) {\n /**\n * this fixes weird behavior when switching between two anchor elements very quickly\n * remove the timeout and switch quickly between two adjancent anchor elements to see it\n *\n * in practice, this means the tooltip is not immediately removed from the DOM on hide\n */\n const timeout = setTimeout(() => {\n setRendered(false)\n }, 150)\n return () => {\n clearTimeout(timeout)\n }\n }\n return () => null\n }, [show])\n\n const handleShow = (value: boolean) => {\n if (!mounted.current) {\n return\n }\n if (value) {\n setRendered(true)\n }\n /**\n * wait for the component to render and calculate position\n * before actually showing\n */\n setTimeout(() => {\n if (!mounted.current) {\n return\n }\n setIsOpen?.(value)\n if (isOpen === undefined) {\n setShow(value)\n }\n }, 10)\n }\n\n /**\n * this replicates the effect from `handleShow()`\n * when `isOpen` is changed from outside\n */\n useEffect(() => {\n if (isOpen === undefined) {\n return () => null\n }\n if (isOpen) {\n setRendered(true)\n }\n const timeout = setTimeout(() => {\n setShow(isOpen)\n }, 10)\n return () => {\n clearTimeout(timeout)\n }\n }, [isOpen])\n\n useEffect(() => {\n if (show === wasShowing.current) {\n return\n }\n wasShowing.current = show\n if (show) {\n afterShow?.()\n } else {\n setImperativeOptions(null)\n afterHide?.()\n }\n }, [show])\n\n const handleShowTooltipDelayed = () => {\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n\n tooltipShowDelayTimerRef.current = setTimeout(() => {\n handleShow(true)\n }, delayShow)\n }\n\n const handleHideTooltipDelayed = (delay = delayHide) => {\n if (tooltipHideDelayTimerRef.current) {\n clearTimeout(tooltipHideDelayTimerRef.current)\n }\n\n tooltipHideDelayTimerRef.current = setTimeout(() => {\n if (hoveringTooltip.current) {\n return\n }\n handleShow(false)\n }, delay)\n }\n\n const handleShowTooltip = (event?: Event) => {\n if (!event) {\n return\n }\n const target = (event.currentTarget ?? event.target) as HTMLElement | null\n if (!target?.isConnected) {\n /**\n * this happens when the target is removed from the DOM\n * at the same time the tooltip gets triggered\n */\n setActiveAnchor(null)\n setProviderActiveAnchor({ current: null })\n return\n }\n if (delayShow) {\n handleShowTooltipDelayed()\n } else {\n handleShow(true)\n }\n setActiveAnchor(target)\n setProviderActiveAnchor({ current: target })\n\n if (tooltipHideDelayTimerRef.current) {\n clearTimeout(tooltipHideDelayTimerRef.current)\n }\n }\n\n const handleHideTooltip = () => {\n if (clickable) {\n // allow time for the mouse to reach the tooltip, in case there's a gap\n handleHideTooltipDelayed(delayHide || 100)\n } else if (delayHide) {\n handleHideTooltipDelayed()\n } else {\n handleShow(false)\n }\n\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n }\n\n const handleTooltipPosition = ({ x, y }: IPosition) => {\n const virtualElement = {\n getBoundingClientRect() {\n return {\n x,\n y,\n width: 0,\n height: 0,\n top: y,\n left: x,\n right: x,\n bottom: y,\n }\n },\n } as Element\n computeTooltipPosition({\n place,\n offset,\n elementReference: virtualElement,\n tooltipReference: tooltipRef.current,\n tooltipArrowReference: tooltipArrowRef.current,\n strategy: positionStrategy,\n middlewares,\n border,\n }).then((computedStylesData) => {\n if (Object.keys(computedStylesData.tooltipStyles).length) {\n setInlineStyles(computedStylesData.tooltipStyles)\n }\n if (Object.keys(computedStylesData.tooltipArrowStyles).length) {\n setInlineArrowStyles(computedStylesData.tooltipArrowStyles)\n }\n setActualPlacement(computedStylesData.place as PlacesType)\n })\n }\n\n const handleMouseMove = (event?: Event) => {\n if (!event) {\n return\n }\n const mouseEvent = event as MouseEvent\n const mousePosition = {\n x: mouseEvent.clientX,\n y: mouseEvent.clientY,\n }\n handleTooltipPosition(mousePosition)\n lastFloatPosition.current = mousePosition\n }\n\n const handleClickTooltipAnchor = (event?: Event) => {\n handleShowTooltip(event)\n if (delayHide) {\n handleHideTooltipDelayed()\n }\n }\n\n const handleClickOutsideAnchors = (event: MouseEvent) => {\n if (!show) {\n return\n }\n const anchorById = document.querySelector<HTMLElement>(`[id='${anchorId}']`)\n const anchors = [anchorById, ...anchorsBySelect]\n if (anchors.some((anchor) => anchor?.contains(event.target as HTMLElement))) {\n return\n }\n if (tooltipRef.current?.contains(event.target as HTMLElement)) {\n return\n }\n handleShow(false)\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n }\n\n // debounce handler to prevent call twice when\n // mouse enter and focus events being triggered toggether\n const debouncedHandleShowTooltip = debounce(handleShowTooltip, 50, true)\n const debouncedHandleHideTooltip = debounce(handleHideTooltip, 50, true)\n const updateTooltipPosition = useCallback(() => {\n const actualPosition = imperativeOptions?.position ?? position\n if (actualPosition) {\n // if `position` is set, override regular and `float` positioning\n handleTooltipPosition(actualPosition)\n return\n }\n\n if (float) {\n if (lastFloatPosition.current) {\n /*\n Without this, changes to `content`, `place`, `offset`, ..., will only\n trigger a position calculation after a `mousemove` event.\n\n To see why this matters, comment this line, run `yarn dev` and click the\n \"Hover me!\" anchor.\n */\n handleTooltipPosition(lastFloatPosition.current)\n }\n // if `float` is set, override regular positioning\n return\n }\n\n if (!activeAnchor?.isConnected) {\n return\n }\n\n computeTooltipPosition({\n place,\n offset,\n elementReference: activeAnchor,\n tooltipReference: tooltipRef.current,\n tooltipArrowReference: tooltipArrowRef.current,\n strategy: positionStrategy,\n middlewares,\n border,\n }).then((computedStylesData) => {\n if (!mounted.current) {\n // invalidate computed positions after remount\n return\n }\n if (Object.keys(computedStylesData.tooltipStyles).length) {\n setInlineStyles(computedStylesData.tooltipStyles)\n }\n if (Object.keys(computedStylesData.tooltipArrowStyles).length) {\n setInlineArrowStyles(computedStylesData.tooltipArrowStyles)\n }\n setActualPlacement(computedStylesData.place as PlacesType)\n })\n }, [\n show,\n activeAnchor,\n content,\n externalStyles,\n place,\n offset,\n positionStrategy,\n position,\n imperativeOptions?.position,\n float,\n ])\n\n useEffect(() => {\n const elementRefs = new Set(anchorRefs)\n\n anchorsBySelect.forEach((anchor) => {\n elementRefs.add({ current: anchor })\n })\n\n const anchorById = document.querySelector<HTMLElement>(`[id='${anchorId}']`)\n if (anchorById) {\n elementRefs.add({ current: anchorById })\n }\n\n const handleScrollResize = () => {\n handleShow(false)\n }\n\n const anchorScrollParent = getScrollParent(activeAnchor)\n const tooltipScrollParent = getScrollParent(tooltipRef.current)\n\n if (closeOnScroll) {\n window.addEventListener('scroll', handleScrollResize)\n anchorScrollParent?.addEventListener('scroll', handleScrollResize)\n tooltipScrollParent?.addEventListener('scroll', handleScrollResize)\n }\n let updateTooltipCleanup: null | (() => void) = null\n if (closeOnResize) {\n window.addEventListener('resize', handleScrollResize)\n } else if (activeAnchor && tooltipRef.current) {\n updateTooltipCleanup = autoUpdate(\n activeAnchor as HTMLElement,\n tooltipRef.current as HTMLElement,\n updateTooltipPosition,\n {\n ancestorResize: true,\n elementResize: true,\n layoutShift: true,\n },\n )\n }\n\n const handleEsc = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') {\n return\n }\n handleShow(false)\n }\n\n if (closeOnEsc) {\n window.addEventListener('keydown', handleEsc)\n }\n\n const enabledEvents: { event: string; listener: (event?: Event) => void }[] = []\n\n if (shouldOpenOnClick) {\n window.addEventListener('click', handleClickOutsideAnchors)\n enabledEvents.push({ event: 'click', listener: handleClickTooltipAnchor })\n } else {\n enabledEvents.push(\n { event: 'mouseenter', listener: debouncedHandleShowTooltip },\n { event: 'mouseleave', listener: debouncedHandleHideTooltip },\n { event: 'focus', listener: debouncedHandleShowTooltip },\n { event: 'blur', listener: debouncedHandleHideTooltip },\n )\n if (float) {\n enabledEvents.push({\n event: 'mousemove',\n listener: handleMouseMove,\n })\n }\n }\n\n const handleMouseEnterTooltip = () => {\n hoveringTooltip.current = true\n }\n const handleMouseLeaveTooltip = () => {\n hoveringTooltip.current = false\n handleHideTooltip()\n }\n\n if (clickable && !shouldOpenOnClick) {\n tooltipRef.current?.addEventListener('mouseenter', handleMouseEnterTooltip)\n tooltipRef.current?.addEventListener('mouseleave', handleMouseLeaveTooltip)\n }\n\n enabledEvents.forEach(({ event, listener }) => {\n elementRefs.forEach((ref) => {\n ref.current?.addEventListener(event, listener)\n })\n })\n\n return () => {\n if (closeOnScroll) {\n window.removeEventListener('scroll', handleScrollResize)\n anchorScrollParent?.removeEventListener('scroll', handleScrollResize)\n tooltipScrollParent?.removeEventListener('scroll', handleScrollResize)\n }\n if (closeOnResize) {\n window.removeEventListener('resize', handleScrollResize)\n } else {\n updateTooltipCleanup?.()\n }\n if (shouldOpenOnClick) {\n window.removeEventListener('click', handleClickOutsideAnchors)\n }\n if (closeOnEsc) {\n window.removeEventListener('keydown', handleEsc)\n }\n if (clickable && !shouldOpenOnClick) {\n tooltipRef.current?.removeEventListener('mouseenter', handleMouseEnterTooltip)\n tooltipRef.current?.removeEventListener('mouseleave', handleMouseLeaveTooltip)\n }\n enabledEvents.forEach(({ event, listener }) => {\n elementRefs.forEach((ref) => {\n ref.current?.removeEventListener(event, listener)\n })\n })\n }\n /**\n * rendered is also a dependency to ensure anchor observers are re-registered\n * since `tooltipRef` becomes stale after removing/adding the tooltip to the DOM\n */\n }, [\n activeAnchor,\n updateTooltipPosition,\n rendered,\n anchorRefs,\n anchorsBySelect,\n closeOnEsc,\n events,\n ])\n\n useEffect(() => {\n let selector = imperativeOptions?.anchorSelect ?? anchorSelect ?? ''\n if (!selector && id) {\n selector = `[data-tooltip-id='${id}']`\n }\n const documentObserverCallback: MutationCallback = (mutationList) => {\n const newAnchors: HTMLElement[] = []\n const removedAnchors: HTMLElement[] = []\n mutationList.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'data-tooltip-id') {\n const newId = (mutation.target as HTMLElement).getAttribute('data-tooltip-id')\n if (newId === id) {\n newAnchors.push(mutation.target as HTMLElement)\n }\n }\n if (mutation.type !== 'childList') {\n return\n }\n if (activeAnchor) {\n const elements = [...mutation.removedNodes].filter((node) => node.nodeType === 1)\n if (selector) {\n try {\n removedAnchors.push(\n // the element itself is an anchor\n ...(elements.filter((element) =>\n (element as HTMLElement).matches(selector),\n ) as HTMLElement[]),\n )\n removedAnchors.push(\n // the element has children which are anchors\n ...elements.flatMap(\n (element) =>\n [...(element as HTMLElement).querySelectorAll(selector)] as HTMLElement[],\n ),\n )\n } catch {\n /**\n * invalid CSS selector.\n * already warned on tooltip controller\n */\n }\n }\n elements.some((node) => {\n if (node?.contains?.(activeAnchor)) {\n setRendered(false)\n handleShow(false)\n setActiveAnchor(null)\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n if (tooltipHideDelayTimerRef.current) {\n clearTimeout(tooltipHideDelayTimerRef.current)\n }\n return true\n }\n return false\n })\n }\n if (!selector) {\n return\n }\n try {\n const elements = [...mutation.addedNodes].filter((node) => node.nodeType === 1)\n newAnchors.push(\n // the element itself is an anchor\n ...(elements.filter((element) =>\n (element as HTMLElement).matches(selector),\n ) as HTMLElement[]),\n )\n newAnchors.push(\n // the element has children which are anchors\n ...elements.flatMap(\n (element) =>\n [...(element as HTMLElement).querySelectorAll(selector)] as HTMLElement[],\n ),\n )\n } catch {\n /**\n * invalid CSS selector.\n * already warned on tooltip controller\n */\n }\n })\n if (newAnchors.length || removedAnchors.length) {\n setAnchorsBySelect((anchors) => [\n ...anchors.filter((anchor) => removedAnchors.includes(anchor)),\n ...newAnchors,\n ])\n }\n }\n const documentObserver = new MutationObserver(documentObserverCallback)\n // watch for anchor being removed from the DOM\n documentObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-tooltip-id'],\n })\n return () => {\n documentObserver.disconnect()\n }\n }, [id, anchorSelect, imperativeOptions?.anchorSelect, activeAnchor])\n\n useEffect(() => {\n updateTooltipPosition()\n }, [updateTooltipPosition])\n\n useEffect(() => {\n if (!contentWrapperRef?.current) {\n return () => null\n }\n const contentObserver = new ResizeObserver(() => {\n updateTooltipPosition()\n })\n contentObserver.observe(contentWrapperRef.current)\n return () => {\n contentObserver.disconnect()\n }\n }, [content, contentWrapperRef?.current])\n\n useEffect(() => {\n const anchorById = document.querySelector<HTMLElement>(`[id='${anchorId}']`)\n const anchors = [...anchorsBySelect, anchorById]\n if (!activeAnchor || !anchors.includes(activeAnchor)) {\n /**\n * if there is no active anchor,\n * or if the current active anchor is not amongst the allowed ones,\n * reset it\n */\n setActiveAnchor(anchorsBySelect[0] ?? anchorById)\n }\n }, [anchorId, anchorsBySelect, activeAnchor])\n\n useEffect(() => {\n return () => {\n if (tooltipShowDelayTimerRef.current) {\n clearTimeout(tooltipShowDelayTimerRef.current)\n }\n if (tooltipHideDelayTimerRef.current) {\n clearTimeout(tooltipHideDelayTimerRef.current)\n }\n }\n }, [])\n\n useEffect(() => {\n let selector = imperativeOptions?.anchorSelect ?? anchorSelect\n if (!selector && id) {\n selector = `[data-tooltip-id='${id}']`\n }\n if (!selector) {\n return\n }\n try {\n const anchors = Array.from(document.querySelectorAll<HTMLElement>(selector))\n setAnchorsBySelect(anchors)\n } catch {\n // warning was already issued in the controller\n setAnchorsBySelect([])\n }\n }, [id, anchorSelect, imperativeOptions?.anchorSelect])\n\n const actualContent = imperativeOptions?.content ?? content\n const canShow = Boolean(!hidden && actualContent && show && Object.keys(inlineStyles).length > 0)\n\n useImperativeHandle(forwardRef, () => ({\n open: (options) => {\n if (options?.anchorSelect) {\n try {\n document.querySelector(options.anchorSelect)\n } catch {\n if (!process.env.NODE_ENV || process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`[react-tooltip] \"${options.anchorSelect}\" is not a valid CSS selector`)\n }\n return\n }\n }\n setImperativeOptions(options ?? null)\n handleShow(true)\n },\n close: () => {\n handleShow(false)\n },\n activeAnchor,\n place: actualPlacement,\n isOpen: rendered && canShow,\n }))\n\n return rendered ? (\n <WrapperElement\n id={id}\n role=\"tooltip\"\n className={classNames(\n 'react-tooltip',\n coreStyles['tooltip'],\n styles['tooltip'],\n styles[variant],\n className,\n `react-tooltip__place-${actualPlacement}`,\n {\n 'react-tooltip__show': canShow,\n [coreStyles['show']]: canShow,\n [coreStyles['fixed']]: positionStrategy === 'fixed',\n [coreStyles['clickable']]: clickable,\n },\n )}\n style={{\n ...externalStyles,\n ...inlineStyles,\n opacity: opacity !== undefined && canShow ? opacity : undefined,\n }}\n ref={tooltipRef}\n >\n {actualContent}\n <WrapperElement\n className={classNames(\n 'react-tooltip-arrow',\n coreStyles['arrow'],\n styles['arrow'],\n classNameArrow,\n {\n /**\n * changed from dash `no-arrow` to camelcase because of:\n * https://github.com/indooorsman/esbuild-css-modules-plugin/issues/42\n */\n [coreStyles['noArrow']]: noArrow,\n },\n )}\n style={{\n ...inlineArrowStyles,\n background: arrowColor\n ? `linear-gradient(to right bottom, transparent 50%, ${arrowColor} 50%)`\n : undefined,\n }}\n ref={tooltipArrowRef}\n />\n </WrapperElement>\n ) : null\n}\n\nexport default Tooltip\n","/* eslint-disable react/no-danger */\nimport React from 'react'\nimport type { ITooltipContent } from './TooltipContentTypes'\n\nconst TooltipContent = ({ content }: ITooltipContent) => {\n return <span dangerouslySetInnerHTML={{ __html: content }} />\n}\n\nexport default TooltipContent\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Tooltip } from 'components/Tooltip'\nimport type {\n EventsType,\n PositionStrategy,\n PlacesType,\n VariantType,\n WrapperType,\n DataAttribute,\n ITooltip,\n ChildrenType,\n TooltipImperativeProps,\n} from 'components/Tooltip/TooltipTypes'\nimport { useTooltip } from 'components/TooltipProvider'\nimport { TooltipContent } from 'components/TooltipContent'\nimport type { ITooltipController } from './TooltipControllerTypes'\n\nconst TooltipController = React.forwardRef<TooltipImperativeProps, ITooltipController>(\n (\n {\n id,\n anchorId,\n anchorSelect,\n content,\n html,\n render,\n className,\n classNameArrow,\n variant = 'dark',\n place = 'top',\n offset = 10,\n wrapper = 'div',\n children = null,\n events = ['hover'],\n openOnClick = false,\n positionStrategy = 'absolute',\n middlewares,\n delayShow = 0,\n delayHide = 0,\n float = false,\n hidden = false,\n noArrow = false,\n clickable = false,\n closeOnEsc = false,\n closeOnScroll = false,\n closeOnResize = false,\n style,\n position,\n isOpen,\n disableStyleInjection = false,\n border,\n opacity,\n arrowColor,\n setIsOpen,\n afterShow,\n afterHide,\n }: ITooltipController,\n ref,\n ) => {\n const [tooltipContent, setTooltipContent] = useState(content)\n const [tooltipHtml, setTooltipHtml] = useState(html)\n const [tooltipPlace, setTooltipPlace] = useState(place)\n const [tooltipVariant, setTooltipVariant] = useState(variant)\n const [tooltipOffset, setTooltipOffset] = useState(offset)\n const [tooltipDelayShow, setTooltipDelayShow] = useState(delayShow)\n const [tooltipDelayHide, setTooltipDelayHide] = useState(delayHide)\n const [tooltipFloat, setTooltipFloat] = useState(float)\n const [tooltipHidden, setTooltipHidden] = useState(hidden)\n const [tooltipWrapper, setTooltipWrapper] = useState<WrapperType>(wrapper)\n const [tooltipEvents, setTooltipEvents] = useState(events)\n const [tooltipPositionStrategy, setTooltipPositionStrategy] = useState(positionStrategy)\n const [activeAnchor, setActiveAnchor] = useState<HTMLElement | null>(null)\n const styleInjectionRef = useRef(disableStyleInjection)\n /**\n * @todo Remove this in a future version (provider/wrapper method is deprecated)\n */\n const { anchorRefs, activeAnchor: providerActiveAnchor } = useTooltip(id)\n\n const getDataAttributesFromAnchorElement = (elementReference: HTMLElement) => {\n const dataAttributes = elementReference?.getAttributeNames().reduce((acc, name) => {\n if (name.startsWith('data-tooltip-')) {\n const parsedAttribute = name.replace(/^data-tooltip-/, '') as DataAttribute\n acc[parsedAttribute] = elementReference?.getAttribute(name) ?? null\n }\n return acc\n }, {} as Record<DataAttribute, string | null>)\n\n return dataAttributes\n }\n\n const applyAllDataAttributesFromAnchorElement = (\n dataAttributes: Record<string, string | null>,\n ) => {\n const handleDataAttributes: Record<DataAttribute, (value: string | null) => void> = {\n place: (value) => {\n setTooltipPlace((value as PlacesType) ?? place)\n },\n content: (value) => {\n setTooltipContent(value ?? content)\n },\n html: (value) => {\n setTooltipHtml(value ?? html)\n },\n variant: (value) => {\n setTooltipVariant((value as VariantType) ?? variant)\n },\n offset: (value) => {\n setTooltipOffset(value === null ? offset : Number(value))\n },\n wrapper: (value) => {\n setTooltipWrapper((value as WrapperType) ?? wrapper)\n },\n events: (value) => {\n const parsed = value?.split(' ') as EventsType[]\n setTooltipEvents(parsed ?? events)\n },\n 'position-strategy': (value) => {\n setTooltipPositionStrategy((value as PositionStrategy) ?? positionStrategy)\n },\n 'delay-show': (value) => {\n setTooltipDelayShow(value === null ? delayShow : Number(value))\n },\n 'delay-hide': (value) => {\n setTooltipDelayHide(value === null ? delayHide : Number(value))\n },\n float: (value) => {\n setTooltipFloat(value === null ? float : value === 'true')\n },\n hidden: (value) => {\n setTooltipHidden(value === null ? hidden : value === 'true')\n },\n }\n // reset unset data attributes to default values\n // without this, data attributes from the last active anchor will still be used\n Object.values(handleDataAttributes).forEach((handler) => handler(null))\n Object.entries(dataAttributes).forEach(([key, value]) => {\n handleDataAttributes[key as DataAttribute]?.(value)\n })\n }\n\n useEffect(() => {\n setTooltipContent(content)\n }, [content])\n\n useEffect(() => {\n setTooltipHtml(html)\n }, [html])\n\n useEffect(() => {\n setTooltipPlace(place)\n }, [place])\n\n useEffect(() => {\n setTooltipVariant(variant)\n }, [variant])\n\n useEffect(() => {\n setTooltipOffset(offset)\n }, [offset])\n\n useEffect(() => {\n setTooltipDelayShow(delayShow)\n }, [delayShow])\n\n useEffect(() => {\n setTooltipDelayHide(delayHide)\n }, [delayHide])\n\n useEffect(() => {\n setTooltipFloat(float)\n }, [float])\n\n useEffect(() => {\n setTooltipHidden(hidden)\n }, [hidden])\n\n useEffect(() => {\n setTooltipPositionStrategy(positionStrategy)\n }, [positionStrategy])\n\n useEffect(() => {\n if (styleInjectionRef.current === disableStyleInjection) {\n return\n }\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn('[react-tooltip] Do not change `disableStyleInjection` dynamically.')\n }\n }, [disableStyleInjection])\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('react-tooltip-inject-styles', {\n detail: {\n disableCore: disableStyleInjection === 'core',\n disableBase: disableStyleInjection,\n },\n }),\n )\n }\n }, [])\n\n useEffect(() => {\n const elementRefs = new Set(anchorRefs)\n\n let selector = anchorSelect\n if (!selector && id) {\n selector = `[data-tooltip-id='${id}']`\n }\n if (selector) {\n try {\n const anchorsBySelect = document.querySelectorAll<HTMLElement>(selector)\n anchorsBySelect.forEach((anchor) => {\n elementRefs.add({ current: anchor })\n })\n } catch {\n if (!process.env.NODE_ENV || process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`[react-tooltip] \"${selector}\" is not a valid CSS selector`)\n }\n }\n }\n\n const anchorById = document.querySelector<HTMLElement>(`[id='${anchorId}']`)\n if (anchorById) {\n elementRefs.add({ current: anchorById })\n }\n\n if (!elementRefs.size) {\n return () => null\n }\n\n const anchorElement = activeAnchor ?? anchorById ?? providerActiveAnchor.current\n\n const observerCallback: MutationCallback = (mutationList) => {\n mutationList.forEach((mutation) => {\n if (\n !anchorElement ||\n mutation.type !== 'attributes' ||\n !mutation.attributeName?.startsWith('data-tooltip-')\n ) {\n return\n }\n // make sure to get all set attributes, since all unset attributes are reset\n const dataAttributes = getDataAttributesFromAnchorElement(anchorElement)\n applyAllDataAttributesFromAnchorElement(dataAttributes)\n })\n }\n\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(observerCallback)\n\n // do not check for subtree and childrens, we only want to know attribute changes\n // to stay watching `data-attributes-*` from anchor element\n const observerConfig = { attributes: true, childList: false, subtree: false }\n\n if (anchorElement) {\n const dataAttributes = getDataAttributesFromAnchorElement(anchorElement)\n applyAllDataAttributesFromAnchorElement(dataAttributes)\n // Start observing the target node for configured mutations\n observer.observe(anchorElement, observerConfig)\n }\n\n return () => {\n // Remove the observer when the tooltip is destroyed\n observer.disconnect()\n }\n }, [anchorRefs, providerActiveAnchor, activeAnchor, anchorId, anchorSelect])\n\n useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return\n }\n if (style?.border) {\n // eslint-disable-next-line no-console\n console.warn('[react-tooltip] Do not set `style.border`. Use `border` prop instead.')\n }\n if (border && !CSS.supports('border', `${border}`)) {\n // eslint-disable-next-line no-console\n console.warn(`[react-tooltip] \"${border}\" is not a valid \\`border\\`.`)\n }\n if (style?.opacity) {\n // eslint-disable-next-line no-console\n console.warn('[react-tooltip] Do not set `style.opacity`. Use `opacity` prop instead.')\n }\n if (opacity && !CSS.supports('opacity', `${opacity}`)) {\n // eslint-disable-next-line no-console\n console.warn(`[react-tooltip] \"${opacity}\" is not a valid \\`opacity\\`.`)\n }\n }, [])\n\n /**\n * content priority: children < render or content < html\n * children should be lower priority so that it can be used as the \"default\" content\n */\n let renderedContent: ChildrenType = children\n const contentWrapperRef = useRef<HTMLDivElement>(null)\n if (render) {\n const rendered = render({ content: tooltipContent ?? null, activeAnchor }) as React.ReactNode\n renderedContent = rendered ? (\n <div ref={contentWrapperRef} className=\"react-tooltip-content-wrapper\">\n {rendered}\n </div>\n ) : null\n } else if (tooltipContent) {\n renderedContent = tooltipContent\n }\n if (tooltipHtml) {\n renderedContent = <TooltipContent content={tooltipHtml} />\n }\n\n const props: ITooltip = {\n forwardRef: ref,\n id,\n anchorId,\n anchorSelect,\n className,\n classNameArrow,\n content: renderedContent,\n contentWrapperRef,\n place: tooltipPlace,\n variant: tooltipVariant,\n offset: tooltipOffset,\n wrapper: tooltipWrapper,\n events: tooltipEvents,\n openOnClick,\n positionStrategy: tooltipPositionStrategy,\n middlewares,\n delayShow: tooltipDelayShow,\n delayHide: tooltipDelayHide,\n float: tooltipFloat,\n hidden: tooltipHidden,\n noArrow,\n clickable,\n closeOnEsc,\n closeOnScroll,\n closeOnResize,\n style,\n position,\n isOpen,\n border,\n opacity,\n arrowColor,\n setIsOpen,\n afterShow,\n afterHide,\n activeAnchor,\n setActiveAnchor: (anchor: HTMLElement | null) => setActiveAnchor(anchor),\n }\n\n return <Tooltip {...props} />\n },\n)\n\nexport default TooltipController\n","import './tokens.css'\n\nimport { injectStyle } from 'utils/handle-style'\n\nimport type {\n ChildrenType,\n DataAttribute,\n EventsType,\n PlacesType,\n PositionStrategy,\n VariantType,\n WrapperType,\n IPosition,\n Middleware,\n TooltipImperativeProps,\n} from './components/Tooltip/TooltipTypes'\nimport type { ITooltipController } from './components/TooltipController/TooltipControllerTypes'\nimport type { ITooltipWrapper } from './components/TooltipProvider/TooltipProviderTypes'\n\n// those content will be replaced in build time with the `react-tooltip.css` builded content\nconst TooltipCoreStyles = 'react-tooltip-core-css-placeholder'\nconst TooltipStyles = 'react-tooltip-css-placeholder'\n\nif (typeof window !== 'undefined') {\n window.addEventListener('react-tooltip-inject-styles', ((\n event: CustomEvent<{ disableCore: boolean; disableBase: boolean }>,\n ) => {\n if (!event.detail.disableCore) {\n injectStyle({ css: TooltipCoreStyles, type: 'core' })\n }\n if (!event.detail.disableBase) {\n injectStyle({ css: TooltipStyles, type: 'base' })\n }\n }) as EventListener)\n}\n\nexport { TooltipController as Tooltip } from './components/TooltipController'\nexport { TooltipProvider, TooltipWrapper } from './components/TooltipProvider'\nexport type {\n ChildrenType,\n DataAttribute,\n EventsType,\n PlacesType,\n PositionStrategy,\n VariantType,\n WrapperType,\n ITooltipController as ITooltip,\n ITooltipWrapper,\n IPosition,\n Middleware,\n TooltipImperativeProps as TooltipRefProps,\n}\n\nexport { removeStyle } from './utils/handle-style'\n"],"names":["REACT_TOOLTIP_CORE_STYLES_ID","REACT_TOOLTIP_BASE_STYLES_ID","injected","core","base","injectStyle","css","id","type","ref","document","process","_a","env","REACT_TOOLTIP_DISABLE_CORE_STYLES","_b","REACT_TOOLTIP_DISABLE_BASE_STYLES","insertAt","getElementById","console","warn","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","removeStyle","tagName","remove","debounce","func","wait","immediate","timeout","args","later","apply","this","setTimeout","clearTimeout","DEFAULT_TOOLTIP_ID","DEFAULT_CONTEXT_DATA","anchorRefs","Set","activeAnchor","current","attach","detach","setActiveAnchor","TooltipContext","createContext","getTooltipData","TooltipProvider","children","anchorRefMap","setAnchorRefMap","useState","activeAnchorMap","setActiveAnchorMap","tooltipId","refs","oldMap","tooltipRefs","forEach","add","delete","useCallback","context","useMemo","React","Provider","value","useTooltip","useContext","TooltipWrapper","className","place","content","html","variant","offset","wrapper","events","positionStrategy","delayShow","delayHide","anchorRef","useRef","useEffect","classNames","useIsomorphicLayoutEffect","window","useLayoutEffect","isScrollable","node","HTMLElement","SVGElement","getComputedStyle","some","propertyName","getPropertyValue","getScrollParent","currentParent","parentElement","scrollingElement","documentElement","computeTooltipPosition","async","elementReference","tooltipReference","tooltipArrowReference","offsetValue","strategy","middlewares","Number","flip","shift","padding","border","tooltipStyles","tooltipArrowStyles","middleware","push","arrow","element","computePosition","placement","then","x","y","middlewareData","styles","left","top","arrowX","arrowY","staticSide","right","bottom","split","borderSide","borderBottom","borderRight","borderWidth","match","Tooltip","forwardRef","classNameArrow","anchorId","anchorSelect","openOnClick","WrapperElement","float","hidden","noArrow","clickable","closeOnEsc","closeOnScroll","closeOnResize","externalStyles","position","afterShow","afterHide","contentWrapperRef","isOpen","setIsOpen","opacity","arrowColor","tooltipRef","tooltipArrowRef","tooltipShowDelayTimerRef","tooltipHideDelayTimerRef","actualPlacement","setActualPlacement","inlineStyles","setInlineStyles","inlineArrowStyles","setInlineArrowStyles","show","setShow","rendered","setRendered","imperativeOptions","setImperativeOptions","wasShowing","lastFloatPosition","setProviderActiveAnchor","hoveringTooltip","anchorsBySelect","setAnchorsBySelect","mounted","shouldOpenOnClick","includes","handleShow","undefined","handleHideTooltipDelayed","delay","handleShowTooltip","event","target","currentTarget","isConnected","handleHideTooltip","handleTooltipPosition","getBoundingClientRect","width","height","computedStylesData","Object","keys","length","handleMouseMove","mouseEvent","mousePosition","clientX","clientY","handleClickTooltipAnchor","handleClickOutsideAnchors","querySelector","anchor","contains","debouncedHandleShowTooltip","debouncedHandleHideTooltip","updateTooltipPosition","actualPosition","elementRefs","anchorById","handleScrollResize","anchorScrollParent","tooltipScrollParent","addEventListener","updateTooltipCleanup","autoUpdate","ancestorResize","elementResize","layoutShift","handleEsc","key","enabledEvents","listener","handleMouseEnterTooltip","handleMouseLeaveTooltip","removeEventListener","selector","documentObserver","MutationObserver","mutationList","newAnchors","removedAnchors","mutation","attributeName","getAttribute","elements","removedNodes","filter","nodeType","matches","flatMap","querySelectorAll","call","addedNodes","anchors","observe","body","childList","subtree","attributes","attributeFilter","disconnect","contentObserver","ResizeObserver","Array","from","actualContent","canShow","Boolean","useImperativeHandle","open","options","close","role","coreStyles","coreStyles_show","coreStyles_fixed","coreStyles_clickable","coreStyles_noArrow","background","TooltipContent","dangerouslySetInnerHTML","__html","TooltipController","render","disableStyleInjection","tooltipContent","setTooltipContent","tooltipHtml","setTooltipHtml","tooltipPlace","setTooltipPlace","tooltipVariant","setTooltipVariant","tooltipOffset","setTooltipOffset","tooltipDelayShow","setTooltipDelayShow","tooltipDelayHide","setTooltipDelayHide","tooltipFloat","setTooltipFloat","tooltipHidden","setTooltipHidden","tooltipWrapper","setTooltipWrapper","tooltipEvents","setTooltipEvents","tooltipPositionStrategy","setTooltipPositionStrategy","styleInjectionRef","providerActiveAnchor","getDataAttributesFromAnchorElement","getAttributeNames","reduce","acc","name","startsWith","replace","applyAllDataAttributesFromAnchorElement","dataAttributes","handleDataAttributes","parsed","values","handler","entries","dispatchEvent","CustomEvent","detail","disableCore","disableBase","size","anchorElement","observer","observerConfig","CSS","supports","renderedContent","props"],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * @copyright ReactTooltip Team
6
6
  * @license MIT
7
7
  */
8
- import React, { createContext, useState, useCallback, useMemo, useContext, useRef, useEffect, useLayoutEffect } from 'react';
8
+ import React, { createContext, useState, useCallback, useMemo, useContext, useRef, useEffect, useLayoutEffect, useImperativeHandle } from 'react';
9
9
  import { arrow, computePosition, offset, flip, shift, autoUpdate } from '@floating-ui/dom';
10
10
  import classNames from 'classnames';
11
11
 
@@ -318,15 +318,16 @@ const computeTooltipPosition = async ({ elementReference = null, tooltipReferenc
318
318
  });
319
319
  };
320
320
 
321
- var coreStyles = {"tooltip":"core-styles-module_tooltip__3vRRp","fixed":"core-styles-module_fixed__pcSol","arrow":"core-styles-module_arrow__cvMwQ","noArrow":"core-styles-module_noArrow__xock6","clickable":"core-styles-module_clickable__ZuTTB","show":"core-styles-module_show__Nt9eE","closing":"core-styles-module_closing__sGnxF"};
321
+ var coreStyles = {"tooltip":"core-styles-module_tooltip__3vRRp","fixed":"core-styles-module_fixed__pcSol","arrow":"core-styles-module_arrow__cvMwQ","noArrow":"core-styles-module_noArrow__xock6","clickable":"core-styles-module_clickable__ZuTTB","show":"core-styles-module_show__Nt9eE"};
322
322
 
323
323
  var styles = {"tooltip":"styles-module_tooltip__mnnfp","arrow":"styles-module_arrow__K0L3T","dark":"styles-module_dark__xNqje","light":"styles-module_light__Z6W-X","success":"styles-module_success__A2AKt","warning":"styles-module_warning__SCK0X","error":"styles-module_error__JvumD","info":"styles-module_info__BWdHW"};
324
324
 
325
325
  const Tooltip = ({
326
326
  // props
327
- id, className, classNameArrow, variant = 'dark', anchorId, anchorSelect, place = 'top', offset = 10, events = ['hover'], openOnClick = false, positionStrategy = 'absolute', middlewares, wrapper: WrapperElement, delayShow = 0, delayHide = 0, float = false, hidden = false, noArrow = false, clickable = false, closeOnEsc = false, closeOnScroll = false, closeOnResize = false, style: externalStyles, position, afterShow, afterHide,
327
+ forwardRef, id, className, classNameArrow, variant = 'dark', anchorId, anchorSelect, place = 'top', offset = 10, events = ['hover'], openOnClick = false, positionStrategy = 'absolute', middlewares, wrapper: WrapperElement, delayShow = 0, delayHide = 0, float = false, hidden = false, noArrow = false, clickable = false, closeOnEsc = false, closeOnScroll = false, closeOnResize = false, style: externalStyles, position, afterShow, afterHide,
328
328
  // props handled by controller
329
329
  content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, border, opacity, arrowColor, }) => {
330
+ var _a;
330
331
  const tooltipRef = useRef(null);
331
332
  const tooltipArrowRef = useRef(null);
332
333
  const tooltipShowDelayTimerRef = useRef(null);
@@ -336,6 +337,7 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
336
337
  const [inlineArrowStyles, setInlineArrowStyles] = useState({});
337
338
  const [show, setShow] = useState(false);
338
339
  const [rendered, setRendered] = useState(false);
340
+ const [imperativeOptions, setImperativeOptions] = useState(null);
339
341
  const wasShowing = useRef(false);
340
342
  const lastFloatPosition = useRef(null);
341
343
  /**
@@ -357,6 +359,23 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
357
359
  mounted.current = false;
358
360
  };
359
361
  }, []);
362
+ useEffect(() => {
363
+ if (!show) {
364
+ /**
365
+ * this fixes weird behavior when switching between two anchor elements very quickly
366
+ * remove the timeout and switch quickly between two adjancent anchor elements to see it
367
+ *
368
+ * in practice, this means the tooltip is not immediately removed from the DOM on hide
369
+ */
370
+ const timeout = setTimeout(() => {
371
+ setRendered(false);
372
+ }, 150);
373
+ return () => {
374
+ clearTimeout(timeout);
375
+ };
376
+ }
377
+ return () => null;
378
+ }, [show]);
360
379
  const handleShow = (value) => {
361
380
  if (!mounted.current) {
362
381
  return;
@@ -405,6 +424,7 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
405
424
  afterShow === null || afterShow === void 0 ? void 0 : afterShow();
406
425
  }
407
426
  else {
427
+ setImperativeOptions(null);
408
428
  afterHide === null || afterHide === void 0 ? void 0 : afterHide();
409
429
  }
410
430
  }, [show]);
@@ -523,6 +543,9 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
523
543
  };
524
544
  const handleClickOutsideAnchors = (event) => {
525
545
  var _a;
546
+ if (!show) {
547
+ return;
548
+ }
526
549
  const anchorById = document.querySelector(`[id='${anchorId}']`);
527
550
  const anchors = [anchorById, ...anchorsBySelect];
528
551
  if (anchors.some((anchor) => anchor === null || anchor === void 0 ? void 0 : anchor.contains(event.target))) {
@@ -541,9 +564,11 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
541
564
  const debouncedHandleShowTooltip = debounce(handleShowTooltip, 50, true);
542
565
  const debouncedHandleHideTooltip = debounce(handleHideTooltip, 50, true);
543
566
  const updateTooltipPosition = useCallback(() => {
544
- if (position) {
567
+ var _a;
568
+ const actualPosition = (_a = imperativeOptions === null || imperativeOptions === void 0 ? void 0 : imperativeOptions.position) !== null && _a !== void 0 ? _a : position;
569
+ if (actualPosition) {
545
570
  // if `position` is set, override regular and `float` positioning
546
- handleTooltipPosition(position);
571
+ handleTooltipPosition(actualPosition);
547
572
  return;
548
573
  }
549
574
  if (float) {
@@ -594,6 +619,7 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
594
619
  offset,
595
620
  positionStrategy,
596
621
  position,
622
+ imperativeOptions === null || imperativeOptions === void 0 ? void 0 : imperativeOptions.position,
597
623
  float,
598
624
  ]);
599
625
  useEffect(() => {
@@ -711,7 +737,8 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
711
737
  events,
712
738
  ]);
713
739
  useEffect(() => {
714
- let selector = anchorSelect !== null && anchorSelect !== void 0 ? anchorSelect : '';
740
+ var _a, _b;
741
+ let selector = (_b = (_a = imperativeOptions === null || imperativeOptions === void 0 ? void 0 : imperativeOptions.anchorSelect) !== null && _a !== void 0 ? _a : anchorSelect) !== null && _b !== void 0 ? _b : '';
715
742
  if (!selector && id) {
716
743
  selector = `[data-tooltip-id='${id}']`;
717
744
  }
@@ -800,7 +827,7 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
800
827
  return () => {
801
828
  documentObserver.disconnect();
802
829
  };
803
- }, [id, anchorSelect, activeAnchor]);
830
+ }, [id, anchorSelect, imperativeOptions === null || imperativeOptions === void 0 ? void 0 : imperativeOptions.anchorSelect, activeAnchor]);
804
831
  useEffect(() => {
805
832
  updateTooltipPosition();
806
833
  }, [updateTooltipPosition]);
@@ -840,7 +867,8 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
840
867
  };
841
868
  }, []);
842
869
  useEffect(() => {
843
- let selector = anchorSelect;
870
+ var _a;
871
+ let selector = (_a = imperativeOptions === null || imperativeOptions === void 0 ? void 0 : imperativeOptions.anchorSelect) !== null && _a !== void 0 ? _a : anchorSelect;
844
872
  if (!selector && id) {
845
873
  selector = `[data-tooltip-id='${id}']`;
846
874
  }
@@ -851,28 +879,55 @@ content, contentWrapperRef, isOpen, setIsOpen, activeAnchor, setActiveAnchor, bo
851
879
  const anchors = Array.from(document.querySelectorAll(selector));
852
880
  setAnchorsBySelect(anchors);
853
881
  }
854
- catch (_a) {
882
+ catch (_b) {
855
883
  // warning was already issued in the controller
856
884
  setAnchorsBySelect([]);
857
885
  }
858
- }, [id, anchorSelect]);
859
- const canShow = !hidden && content && show && Object.keys(inlineStyles).length > 0;
860
- return rendered ? (React.createElement(WrapperElement, { id: id, role: "tooltip", className: classNames('react-tooltip', coreStyles['tooltip'], styles['tooltip'], styles[variant], className, `react-tooltip__place-${actualPlacement}`, coreStyles[canShow ? 'show' : 'closing'], canShow ? 'react-tooltip__show' : 'react-tooltip__closing', positionStrategy === 'fixed' && coreStyles['fixed'], clickable && coreStyles['clickable']), onTransitionEnd: (event) => {
861
- /**
862
- * @warning if `--rt-transition-closing-delay` is set to 0,
863
- * the tooltip will be stuck (but not visible) on the DOM
864
- */
865
- if (show || event.propertyName !== 'opacity') {
866
- return;
886
+ }, [id, anchorSelect, imperativeOptions === null || imperativeOptions === void 0 ? void 0 : imperativeOptions.anchorSelect]);
887
+ const actualContent = (_a = imperativeOptions === null || imperativeOptions === void 0 ? void 0 : imperativeOptions.content) !== null && _a !== void 0 ? _a : content;
888
+ const canShow = Boolean(!hidden && actualContent && show && Object.keys(inlineStyles).length > 0);
889
+ useImperativeHandle(forwardRef, () => ({
890
+ open: (options) => {
891
+ if (options === null || options === void 0 ? void 0 : options.anchorSelect) {
892
+ try {
893
+ document.querySelector(options.anchorSelect);
894
+ }
895
+ catch (_a) {
896
+ {
897
+ // eslint-disable-next-line no-console
898
+ console.warn(`[react-tooltip] "${options.anchorSelect}" is not a valid CSS selector`);
899
+ }
900
+ return;
901
+ }
867
902
  }
868
- setRendered(false);
869
- }, style: {
903
+ setImperativeOptions(options !== null && options !== void 0 ? options : null);
904
+ handleShow(true);
905
+ },
906
+ close: () => {
907
+ handleShow(false);
908
+ },
909
+ activeAnchor,
910
+ place: actualPlacement,
911
+ isOpen: rendered && canShow,
912
+ }));
913
+ return rendered ? (React.createElement(WrapperElement, { id: id, role: "tooltip", className: classNames('react-tooltip', coreStyles['tooltip'], styles['tooltip'], styles[variant], className, `react-tooltip__place-${actualPlacement}`, {
914
+ 'react-tooltip__show': canShow,
915
+ [coreStyles['show']]: canShow,
916
+ [coreStyles['fixed']]: positionStrategy === 'fixed',
917
+ [coreStyles['clickable']]: clickable,
918
+ }), style: {
870
919
  ...externalStyles,
871
920
  ...inlineStyles,
872
921
  opacity: opacity !== undefined && canShow ? opacity : undefined,
873
922
  }, ref: tooltipRef },
874
- content,
875
- React.createElement(WrapperElement, { className: classNames('react-tooltip-arrow', coreStyles['arrow'], styles['arrow'], classNameArrow, noArrow && coreStyles['noArrow']), style: {
923
+ actualContent,
924
+ React.createElement(WrapperElement, { className: classNames('react-tooltip-arrow', coreStyles['arrow'], styles['arrow'], classNameArrow, {
925
+ /**
926
+ * changed from dash `no-arrow` to camelcase because of:
927
+ * https://github.com/indooorsman/esbuild-css-modules-plugin/issues/42
928
+ */
929
+ [coreStyles['noArrow']]: noArrow,
930
+ }), style: {
876
931
  ...inlineArrowStyles,
877
932
  background: arrowColor
878
933
  ? `linear-gradient(to right bottom, transparent 50%, ${arrowColor} 50%)`
@@ -885,7 +940,7 @@ const TooltipContent = ({ content }) => {
885
940
  return React.createElement("span", { dangerouslySetInnerHTML: { __html: content } });
886
941
  };
887
942
 
888
- const TooltipController = ({ id, anchorId, anchorSelect, content, html, render, className, classNameArrow, variant = 'dark', place = 'top', offset = 10, wrapper = 'div', children = null, events = ['hover'], openOnClick = false, positionStrategy = 'absolute', middlewares, delayShow = 0, delayHide = 0, float = false, hidden = false, noArrow = false, clickable = false, closeOnEsc = false, closeOnScroll = false, closeOnResize = false, style, position, isOpen, disableStyleInjection = false, border, opacity, arrowColor, setIsOpen, afterShow, afterHide, }) => {
943
+ const TooltipController = React.forwardRef(({ id, anchorId, anchorSelect, content, html, render, className, classNameArrow, variant = 'dark', place = 'top', offset = 10, wrapper = 'div', children = null, events = ['hover'], openOnClick = false, positionStrategy = 'absolute', middlewares, delayShow = 0, delayHide = 0, float = false, hidden = false, noArrow = false, clickable = false, closeOnEsc = false, closeOnScroll = false, closeOnResize = false, style, position, isOpen, disableStyleInjection = false, border, opacity, arrowColor, setIsOpen, afterShow, afterHide, }, ref) => {
889
944
  const [tooltipContent, setTooltipContent] = useState(content);
890
945
  const [tooltipHtml, setTooltipHtml] = useState(html);
891
946
  const [tooltipPlace, setTooltipPlace] = useState(place);
@@ -1109,6 +1164,7 @@ const TooltipController = ({ id, anchorId, anchorSelect, content, html, render,
1109
1164
  renderedContent = React.createElement(TooltipContent, { content: tooltipHtml });
1110
1165
  }
1111
1166
  const props = {
1167
+ forwardRef: ref,
1112
1168
  id,
1113
1169
  anchorId,
1114
1170
  anchorSelect,
@@ -1146,7 +1202,7 @@ const TooltipController = ({ id, anchorId, anchorSelect, content, html, render,
1146
1202
  setActiveAnchor: (anchor) => setActiveAnchor(anchor),
1147
1203
  };
1148
1204
  return React.createElement(Tooltip, { ...props });
1149
- };
1205
+ });
1150
1206
 
1151
1207
  // those content will be replaced in build time with the `react-tooltip.css` builded content
1152
1208
  const TooltipCoreStyles = `:root {
@@ -1157,17 +1213,17 @@ const TooltipCoreStyles = `:root {
1157
1213
  --rt-color-warning: #f0ad4e;
1158
1214
  --rt-color-info: #337ab7;
1159
1215
  --rt-opacity: 0.9;
1160
- --rt-transition-show-delay: 0.15s;
1161
- --rt-transition-closing-delay: 0.15s;
1162
1216
  }
1163
1217
 
1164
1218
  .core-styles-module_tooltip__3vRRp {
1219
+ visibility: hidden;
1165
1220
  position: absolute;
1166
1221
  top: 0;
1167
1222
  left: 0;
1168
1223
  pointer-events: none;
1169
1224
  opacity: 0;
1170
- will-change: opacity;
1225
+ transition: opacity 0.3s ease-out;
1226
+ will-change: opacity, visibility;
1171
1227
  }
1172
1228
 
1173
1229
  .core-styles-module_fixed__pcSol {
@@ -1188,13 +1244,8 @@ const TooltipCoreStyles = `:root {
1188
1244
  }
1189
1245
 
1190
1246
  .core-styles-module_show__Nt9eE {
1247
+ visibility: visible;
1191
1248
  opacity: var(--rt-opacity);
1192
- transition: opacity var(--rt-transition-show-delay) ease-out;
1193
- }
1194
-
1195
- .core-styles-module_closing__sGnxF {
1196
- opacity: 0;
1197
- transition: opacity var(--rt-transition-closing-delay) ease-in;
1198
1249
  }
1199
1250
 
1200
1251
  `;