{"version":3,"file":"Tooltip.cjs","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import { cloneElement, useRef } from 'react';\nimport cx from 'clsx';\nimport { useMergedRef } from '@raikou/hooks';\nimport {\n  Box,\n  createVarsResolver,\n  factory,\n  Factory,\n  getDefaultZIndex,\n  getRadius,\n  getRefProp,\n  getThemeColor,\n  isElement,\n  useDirection,\n  useProps,\n  useStyles,\n} from '../../core';\nimport {\n  ArrowPosition,\n  FloatingArrow,\n  FloatingAxesOffsets,\n  FloatingPosition,\n  FloatingStrategy,\n  getFloatingPosition,\n} from '../Floating';\nimport { OptionalPortal } from '../Portal';\nimport { getTransitionProps, Transition, TransitionOverride } from '../Transition';\nimport { TooltipBaseProps, TooltipCssVariables, TooltipStylesNames } from './Tooltip.types';\nimport { TooltipFloating } from './TooltipFloating/TooltipFloating';\nimport { TooltipGroup } from './TooltipGroup/TooltipGroup';\nimport { useTooltip } from './use-tooltip';\nimport { TooltipArrowStyle, TooltipRootStyle } from './Tooltip.css';\n\nexport interface TooltipProps extends TooltipBaseProps {\n  /** Called when tooltip position changes */\n  onPositionChange?: (position: FloatingPosition) => void;\n\n  /** Open delay in ms */\n  openDelay?: number;\n\n  /** Close delay in ms, `0` by default */\n  closeDelay?: number;\n\n  /** Controlled opened state */\n  opened?: boolean;\n\n  /** Uncontrolled tooltip initial opened state */\n  defaultOpened?: boolean;\n\n  /** Space between target element and tooltip in px, `5` by default */\n  offset?: number | FloatingAxesOffsets;\n\n  /** Determines whether the tooltip should have an arrow, `false` by default */\n  withArrow?: boolean;\n\n  /** Arrow size in px, `4` by default */\n  arrowSize?: number;\n\n  /** Arrow offset in px, `5` by default */\n  arrowOffset?: number;\n\n  /** Arrow `border-radius` in px, `0` by default */\n  arrowRadius?: number;\n\n  /** Arrow position relative to the tooltip, `side` by default */\n  arrowPosition?: ArrowPosition;\n\n  /** Props passed down to the `Transition` component that used to animate tooltip presence, use to configure duration and animation type, `{ duration: 100, transition: 'fade' }` by default */\n  transitionProps?: TransitionOverride;\n\n  /** Determines which events will be used to show tooltip, `{ hover: true, focus: false, touch: false }` by default */\n  events?: { hover: boolean; focus: boolean; touch: boolean };\n\n  /** `useEffect` dependencies to force update tooltip position */\n  positionDependencies?: any[];\n\n  /** Must be set if the tooltip target is an inline element */\n  inline?: boolean;\n\n  /** If set, the tooltip will not be unmounted from the DOM when it is hidden, `display: none` styles will be applied instead */\n  keepMounted?: boolean;\n\n  /** Changes floating ui [position strategy](https://floating-ui.com/docs/usefloating#strategy), `'absolute'` by default */\n  floatingStrategy?: FloatingStrategy;\n}\n\nexport type TooltipFactory = Factory<{\n  props: TooltipProps;\n  ref: HTMLDivElement;\n  stylesNames: TooltipStylesNames;\n  vars: TooltipCssVariables;\n  staticComponents: {\n    Floating: typeof TooltipFloating;\n    Group: typeof TooltipGroup;\n  };\n}>;\n\nconst defaultProps: Partial<TooltipProps> = {\n  position: 'top',\n  refProp: 'ref',\n  withinPortal: true,\n  inline: false,\n  defaultOpened: false,\n  arrowSize: 4,\n  arrowOffset: 5,\n  arrowRadius: 0,\n  arrowPosition: 'side',\n  offset: 5,\n  transitionProps: { duration: 100, transition: 'fade' },\n  events: { hover: true, focus: false, touch: false },\n  zIndex: getDefaultZIndex('popover'),\n  positionDependencies: [],\n};\n\nconst varsResolver = createVarsResolver<TooltipFactory>((theme, { radius, color }) => ({\n  tooltip: {\n    '--tooltip-radius': radius === undefined ? undefined : getRadius(radius),\n    '--tooltip-bg': color ? getThemeColor(color, theme) : undefined,\n    '--tooltip-color': color ? 'var(--raikou-color-white)' : undefined,\n  },\n}));\n\nexport const Tooltip = factory<TooltipFactory>((_props, ref) => {\n  const props = useProps('Tooltip', defaultProps, _props);\n  const {\n    children,\n    position,\n    refProp,\n    label,\n    openDelay,\n    closeDelay,\n    onPositionChange,\n    opened,\n    defaultOpened,\n    withinPortal,\n    radius,\n    color,\n    classNames,\n    styles,\n    unstyled,\n    style,\n    className,\n    withArrow,\n    arrowSize,\n    arrowOffset,\n    arrowRadius,\n    arrowPosition,\n    offset,\n    transitionProps,\n    multiline,\n    events,\n    zIndex,\n    disabled,\n    positionDependencies,\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n    inline,\n    variant,\n    keepMounted,\n    vars,\n    portalProps,\n    mod,\n    floatingStrategy,\n    ...others\n  } = useProps('Tooltip', defaultProps, props);\n\n  const { dir } = useDirection();\n  const arrowRef = useRef<HTMLDivElement>(null);\n  const tooltip = useTooltip({\n    position: getFloatingPosition(dir, position!),\n    closeDelay,\n    openDelay,\n    onPositionChange,\n    opened,\n    defaultOpened,\n    events,\n    arrowRef,\n    arrowOffset,\n    offset: typeof offset === 'number' ? offset! + (withArrow ? arrowSize! / 2 : 0) : offset!,\n    positionDependencies: [...positionDependencies!, children],\n    inline,\n    strategy: floatingStrategy,\n  });\n\n  const getStyles = useStyles<TooltipFactory>({\n    name: 'Tooltip',\n    props,\n    classes: {\n      tooltip: TooltipRootStyle,\n      arrow: TooltipArrowStyle,\n    },\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    rootSelector: 'tooltip',\n    vars,\n    varsResolver,\n  });\n\n  if (!isElement(children)) {\n    throw new Error(\n      '[@raikou/core] Tooltip component children should be an element or a component that accepts ref, fragments, strings, numbers and other primitive values are not supported'\n    );\n  }\n\n  const targetRef = useMergedRef(tooltip.reference, getRefProp(children), ref);\n  const transition = getTransitionProps(transitionProps, { duration: 100, transition: 'fade' });\n\n  return (\n    <>\n      <OptionalPortal {...portalProps} withinPortal={withinPortal}>\n        <Transition\n          {...transition}\n          keepMounted={keepMounted}\n          mounted={!disabled && !!tooltip.opened}\n          duration={tooltip.isGroupPhase ? 10 : transition.duration}\n        >\n          {(transitionStyles) => (\n            <Box\n              {...others}\n              data-fixed={floatingStrategy === 'fixed' || undefined}\n              variant={variant}\n              mod={[{ multiline }, mod]}\n              {...tooltip.getFloatingProps({\n                ref: tooltip.floating,\n                className: getStyles('tooltip').className,\n                style: {\n                  ...getStyles('tooltip').style,\n                  ...transitionStyles,\n                  zIndex: zIndex as React.CSSProperties['zIndex'],\n                  top: tooltip.y ?? 0,\n                  left: tooltip.x ?? 0,\n                },\n              })}\n            >\n              {label}\n\n              <FloatingArrow\n                ref={arrowRef}\n                arrowX={tooltip.arrowX!}\n                arrowY={tooltip.arrowY!}\n                visible={withArrow!}\n                position={tooltip.placement!}\n                arrowSize={arrowSize!}\n                arrowOffset={arrowOffset!}\n                arrowRadius={arrowRadius!}\n                arrowPosition={arrowPosition!}\n                {...getStyles('arrow')}\n              />\n            </Box>\n          )}\n        </Transition>\n      </OptionalPortal>\n\n      {cloneElement(\n        children,\n        tooltip.getReferenceProps({\n          onClick,\n          onMouseEnter,\n          onMouseLeave,\n          onMouseMove: props.onMouseMove,\n          onPointerDown: props.onPointerDown,\n          onPointerEnter: props.onPointerEnter,\n          [refProp!]: targetRef,\n          className: cx(className, children.props.className),\n          ...children.props,\n        })\n      )}\n    </>\n  );\n});\n\nTooltip.displayName = '@raikou/core/Tooltip';\nTooltip.Floating = TooltipFloating;\nTooltip.Group = TooltipGroup;\n"],"names":["getDefaultZIndex","createVarsResolver","getRadius","getThemeColor","factory","useProps","useDirection","useRef","useTooltip","getFloatingPosition","useStyles","TooltipRootStyle","TooltipArrowStyle","isElement","useMergedRef","getRefProp","getTransitionProps","jsxs","Fragment","jsx","OptionalPortal","Transition","Box","FloatingArrow","cloneElement","cx","TooltipFloating","TooltipGroup"],"mappings":"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"}