{"version":3,"file":"TooltipTrigger-CNRgF1yY.mjs","names":["RefObject","useMemo","useRef","useState","TooltipOptions","arrow","autoUpdate","flip","hide","offset","shift","useDismiss","useFloating","UseFloatingReturn","useFocus","useHover","useInteractions","UseInteractionsReturn","useRole","ThemeBaseColor","arrowWidth","UseTooltipReturn","open","setOpen","color","arrowRef","HTMLDivElement","useTooltip","initialOpen","placement","controlledOpen","onOpen","setControlledOpen","openDelay","closeDelay","uncontrolledOpen","setUncontrolledOpen","isUncontrolled","undefined","offsetVal","data","onOpenChange","whileElementsMounted","middleware","padding","element","context","hover","move","enabled","delay","close","focus","dismiss","role","interactions","createContext","useContext","useTooltip","ContextType","ReturnType","TooltipContext","useTooltipContext","context","Error","ReactNode","TooltipOptions","useTooltip","TooltipContext","Props","children","Tooltip","t0","$","_c","options","tooltip","t1","ComponentProps","RefObject","useTooltipContext","FloatingPortal","useMergeRefs","clsx","computeArrowStyle","Dialog","Props","ref","HTMLDivElement","pointerEvents","TooltipContent","style","children","className","props","context","mergedRef","refs","setFloating","open","middlewareData","hide","referenceHidden","floatingStyles","getFloatingProps","placement","color","arrowRef","HTMLProps","RefObject","cloneElement","isValidElement","useTooltipContext","useMergeRefs","Props","HTMLElement","asChild","ref","TooltipTrigger","children","props","context","childrenRef","mergedRef","refs","setReference","getReferenceProps","open"],"sources":["../src/components/tooltip/useTooltip.ts","../src/components/tooltip/useTooltipContext.ts","../src/components/tooltip/Tooltip.tsx","../src/components/tooltip/TooltipContent.tsx","../src/components/tooltip/TooltipTrigger.tsx"],"sourcesContent":["import { RefObject, useMemo, useRef, useState } from \"react\";\nimport { TooltipOptions } from \"./interface\";\nimport {\n  arrow,\n  autoUpdate,\n  flip,\n  hide,\n  offset,\n  shift,\n  useDismiss,\n  useFloating,\n  UseFloatingReturn,\n  useFocus,\n  useHover,\n  useInteractions,\n  UseInteractionsReturn,\n  useRole,\n} from \"@floating-ui/react\";\nimport { ThemeBaseColor } from \"../../types\";\n\nconst arrowWidth = 16;\n\nexport type UseTooltipReturn = {\n  open: boolean;\n  setOpen?: (open: boolean) => void;\n  color?: ThemeBaseColor;\n  arrowRef: RefObject<HTMLDivElement | null>;\n} & UseInteractionsReturn &\n  UseFloatingReturn;\n\nexport function useTooltip({\n  initialOpen = false,\n  placement = \"top\",\n  open: controlledOpen,\n  onOpen: setControlledOpen,\n  openDelay = 500,\n  closeDelay = 500,\n  color = \"yellow\",\n}: TooltipOptions = {}): UseTooltipReturn {\n  const [uncontrolledOpen, setUncontrolledOpen] = useState(initialOpen);\n\n  const isUncontrolled = controlledOpen === null || controlledOpen === undefined;\n\n  const open = isUncontrolled ? uncontrolledOpen : controlledOpen;\n  const setOpen = isUncontrolled ? setUncontrolledOpen : setControlledOpen;\n\n  const arrowRef = useRef<HTMLDivElement>(null);\n\n  const offsetVal = arrowWidth / 2;\n\n  const data = useFloating({\n    placement,\n    open,\n    onOpenChange: setOpen,\n    whileElementsMounted: autoUpdate,\n    middleware: [\n      offset(offsetVal),\n      flip(),\n      shift({ padding: 5 }),\n      arrow({\n        element: arrowRef,\n        padding: 12,\n      }),\n      hide({\n        padding: 20,\n      }),\n    ],\n  });\n  const { context } = data;\n\n  const hover = useHover(context, {\n    move: false,\n    enabled: isUncontrolled,\n    delay: {\n      open: openDelay || 1,\n      close: closeDelay,\n    },\n  });\n  const focus = useFocus(context, {\n    enabled: isUncontrolled,\n  });\n  const dismiss = useDismiss(context);\n  const role = useRole(context, { role: \"tooltip\" });\n\n  const interactions = useInteractions([hover, focus, dismiss, role]);\n\n  return useMemo(\n    () => ({\n      open,\n      setOpen,\n      ...interactions,\n      ...data,\n      arrowRef,\n      color,\n    }),\n    [open, setOpen, color, interactions, data],\n  );\n}\n","import { createContext, useContext } from \"react\";\nimport { useTooltip } from \"./useTooltip\";\n\ntype ContextType = ReturnType<typeof useTooltip> | null;\n\nexport const TooltipContext = createContext<ContextType>(null);\n\nexport function useTooltipContext() {\n  const context = useContext(TooltipContext);\n\n  if (context === null) {\n    throw new Error(\"Tooltip components must be wrapped in <Tooltip />\");\n  }\n\n  return context;\n}\n","import { ReactNode } from \"react\";\nimport { TooltipOptions } from \"./interface\";\nimport { useTooltip } from \"./useTooltip\";\nimport { TooltipContext } from \"./useTooltipContext\";\n\ninterface Props extends TooltipOptions {\n  children: ReactNode;\n}\n\nexport function Tooltip({ children, ...options }: Props) {\n  const tooltip = useTooltip(options);\n  return <TooltipContext.Provider value={tooltip}>{children}</TooltipContext.Provider>;\n}\n","import { ComponentProps, RefObject } from \"react\";\nimport { useTooltipContext } from \"./useTooltipContext\";\nimport { FloatingPortal, useMergeRefs } from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { computeArrowStyle } from \"../dialog/util\";\nimport { Dialog } from \"../dialog/Dialog\";\n\ninterface Props extends ComponentProps<\"div\"> {\n  ref?: RefObject<HTMLDivElement>;\n  pointerEvents?: \"none\" | \"auto\";\n}\n\nexport function TooltipContent({\n  style,\n  children,\n  className,\n  ref,\n  pointerEvents = \"none\",\n  ...props\n}: Props) {\n  const context = useTooltipContext();\n  const mergedRef = useMergeRefs([context.refs.setFloating, ref]);\n  if (!context.open) {\n    return null;\n  }\n  return (\n    <FloatingPortal>\n      <div\n        ref={mergedRef}\n        className={clsx(\n          \"z-tooltip outline-hidden\",\n          pointerEvents === \"none\" && \"pointer-events-none\",\n          context.middlewareData.hide?.referenceHidden && \"invisible\",\n        )}\n        style={{ ...context.floatingStyles, ...style }}\n        {...context.getFloatingProps(props)}\n      >\n        <Dialog\n          placement={context.placement}\n          className={clsx(\"text-body-sm motion-safe:animate-fade-in max-w-80 px-2 py-1\", className)}\n          color={context.color}\n          role=\"tooltip\"\n        >\n          {children}\n          <div\n            ref={context.arrowRef}\n            style={computeArrowStyle(context)}\n            className=\"p8n-arrow\"\n          ></div>\n        </Dialog>\n      </div>\n    </FloatingPortal>\n  );\n}\n","import { HTMLProps, RefObject, cloneElement, isValidElement } from \"react\";\nimport { useTooltipContext } from \"./useTooltipContext\";\nimport { useMergeRefs } from \"@floating-ui/react\";\n\ninterface Props extends HTMLProps<HTMLElement> {\n  /* allows the user to pass any element as the anchor instead of <button> */\n  asChild?: boolean;\n  ref?: RefObject<HTMLElement>;\n}\n\nexport function TooltipTrigger({ children, asChild = false, ref, ...props }: Props) {\n  const context = useTooltipContext();\n  const childrenRef = (children as any).ref;\n  const mergedRef = useMergeRefs([context.refs.setReference, ref, childrenRef]);\n\n  if (asChild && isValidElement(children)) {\n    return cloneElement(\n      children,\n      context.getReferenceProps({\n        ref: mergedRef,\n        ...props,\n        ...(children.props ?? {}),\n        // @ts-ignore\n        \"data-state\": context.open ? \"open\" : \"closed\",\n      }),\n    );\n  }\n\n  return (\n    <abbr ref={mergedRef} {...context.getReferenceProps(props)}>\n      {children}\n    </abbr>\n  );\n}\n"],"mappings":"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"}