{"version":3,"file":"use-tooltip.mjs","sources":["../../../src/components/Tooltip/use-tooltip.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport {\n  arrow,\n  flip,\n  inline,\n  offset,\n  shift,\n  useDelayGroup,\n  useDelayGroupContext,\n  useDismiss,\n  useFloating,\n  useFocus,\n  useHover,\n  useInteractions,\n  useRole,\n} from '@floating-ui/react';\nimport { useDidUpdate, useId } from '@raikou/hooks';\nimport {\n  FloatingAxesOffsets,\n  FloatingPosition,\n  FloatingStrategy,\n  useFloatingAutoUpdate,\n} from '../Floating';\nimport { useTooltipGroupContext } from './TooltipGroup/TooltipGroup.context';\n\ninterface UseTooltip {\n  position: FloatingPosition;\n  closeDelay?: number;\n  openDelay?: number;\n  onPositionChange?: (position: FloatingPosition) => void;\n  opened?: boolean;\n  defaultOpened?: boolean;\n  offset: number | FloatingAxesOffsets;\n  arrowRef?: React.RefObject<HTMLDivElement>;\n  arrowOffset?: number;\n  events?: { hover: boolean; focus: boolean; touch: boolean };\n  positionDependencies: any[];\n  inline?: boolean;\n  strategy?: FloatingStrategy;\n}\n\nexport function useTooltip(settings: UseTooltip): any {\n  const [uncontrolledOpened, setUncontrolledOpened] = useState(settings.defaultOpened);\n  const controlled = typeof settings.opened === 'boolean';\n  const opened = controlled ? settings.opened : uncontrolledOpened;\n  const withinGroup = useTooltipGroupContext();\n  const uid = useId();\n\n  const { delay: groupDelay, currentId, setCurrentId } = useDelayGroupContext();\n\n  const onChange = useCallback(\n    (_opened: boolean) => {\n      setUncontrolledOpened(_opened);\n\n      if (_opened) {\n        setCurrentId(uid);\n      }\n    },\n    [setCurrentId, uid]\n  );\n\n  const {\n    x,\n    y,\n    context,\n    refs,\n    update,\n    placement,\n    middlewareData: { arrow: { x: arrowX, y: arrowY } = {} },\n  } = useFloating({\n    strategy: settings.strategy,\n    placement: settings.position,\n    open: opened,\n    onOpenChange: onChange,\n    middleware: [\n      offset(settings.offset),\n      shift({ padding: 8 }),\n      flip(),\n      arrow({ element: settings.arrowRef!, padding: settings.arrowOffset }),\n      ...(settings.inline ? [inline()] : []),\n    ],\n  });\n\n  useDelayGroup(context, { id: uid });\n\n  const { getReferenceProps, getFloatingProps } = useInteractions([\n    useHover(context, {\n      enabled: settings.events?.hover,\n      delay: withinGroup ? groupDelay : { open: settings.openDelay, close: settings.closeDelay },\n      mouseOnly: !settings.events?.touch,\n    }),\n    useFocus(context, { enabled: settings.events?.focus, visibleOnly: true }),\n    useRole(context, { role: 'tooltip' }),\n    // Cannot be used with controlled tooltip, page jumps\n    useDismiss(context, { enabled: typeof settings.opened === 'undefined' }),\n  ]);\n\n  useFloatingAutoUpdate({\n    opened,\n    position: settings.position,\n    positionDependencies: settings.positionDependencies,\n    floating: { refs, update },\n  });\n\n  useDidUpdate(() => {\n    settings.onPositionChange?.(placement);\n  }, [placement]);\n\n  const isGroupPhase = opened && currentId && currentId !== uid;\n\n  return {\n    x,\n    y,\n    arrowX,\n    arrowY,\n    reference: refs.setReference,\n    floating: refs.setFloating,\n    getFloatingProps,\n    getReferenceProps,\n    isGroupPhase,\n    opened,\n    placement,\n  };\n}\n"],"names":[],"mappings":"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"}