{"version":3,"file":"TooltipStandalone.mjs","names":["BaseTooltip"],"sources":["../../src/Tooltip/TooltipStandalone.tsx"],"sourcesContent":["'use client';\n\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { Tooltip as BaseTooltip } from '@base-ui/react/tooltip';\nimport { cx } from 'antd-style';\nimport { cloneElement, isValidElement, memo, useCallback, useMemo, useState } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { useFloatingLayer } from '@/hooks/useFloatingLayer';\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { useNativeButton } from '@/hooks/useNativeButton';\nimport { useAppElement } from '@/ThemeProvider';\nimport { placementMap } from '@/utils/placement';\n\nimport { TooltipArrowIcon } from './ArrowIcon';\nimport { styles } from './style';\nimport TooltipContent from './TooltipContent';\nimport { type TooltipProps } from './type';\n\nconst DEFAULT_OPEN_DELAY = 400;\nconst DEFAULT_CLOSE_DELAY = 100;\n\n/**\n * Tooltip component - displays small contextual hints on hover/focus\n * Compatible with Ant Design Tooltip-like API (subset)\n */\nexport const TooltipStandalone = memo<TooltipProps>(\n  ({\n    children,\n    title,\n    arrow = false,\n    className,\n    classNames,\n    closeDelay,\n    defaultOpen = false,\n    disabled = false,\n    getPopupContainer,\n    hotkey,\n    hotkeyProps,\n    mouseEnterDelay,\n    mouseLeaveDelay,\n    onOpenChange,\n    open,\n    openDelay,\n    placement = 'top',\n    popupContainer,\n    styles: styleProps,\n    zIndex,\n    ref: refProp,\n    positionerProps,\n    triggerProps,\n    popupProps,\n    portalProps,\n    standalone: _standalone,\n    ...restProps\n  }) => {\n    const isClient = useIsClient();\n    const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));\n    const [triggerNode, setTriggerNode] = useState<HTMLElement | null>(null);\n    const triggerCallbackRef = useCallback((node: HTMLElement | null) => {\n      if (node) setTriggerNode(node);\n    }, []);\n\n    const mergedOpen = open ?? uncontrolledOpen;\n    const resolvedOpen = disabled ? false : mergedOpen;\n\n    const handleOpenChange = useCallback(\n      (nextOpen: boolean) => {\n        if (disabled && nextOpen) return;\n        onOpenChange?.(nextOpen);\n        if (open === undefined) {\n          setUncontrolledOpen(nextOpen);\n        }\n      },\n      [disabled, onOpenChange, open],\n    );\n\n    const resolvedOpenDelay = useMemo(() => {\n      if (openDelay !== undefined) return openDelay;\n      if (mouseEnterDelay !== undefined) return mouseEnterDelay * 1000;\n      return DEFAULT_OPEN_DELAY;\n    }, [mouseEnterDelay, openDelay]);\n\n    const resolvedCloseDelay = useMemo(() => {\n      if (closeDelay !== undefined) return closeDelay;\n      if (mouseLeaveDelay !== undefined) return mouseLeaveDelay * 1000;\n      return DEFAULT_CLOSE_DELAY;\n    }, [closeDelay, mouseLeaveDelay]);\n\n    const placementConfig = placementMap[placement] ?? placementMap.top;\n    const baseSideOffset = arrow ? 8 : 6;\n\n    const appElement = useAppElement();\n    const floatingLayerContainer = useFloatingLayer();\n    const portalContainer = floatingLayerContainer ?? appElement;\n\n    const { isNativeButtonTriggerElement } = useNativeButton({\n      children,\n    });\n\n    const resolvedClassNames = useMemo(\n      () => ({\n        arrow: cx(styles.arrow, classNames?.arrow),\n        popup: cx(styles.popup, className, classNames?.root, classNames?.container),\n        positioner: styles.positioner,\n        viewport: cx(styles.viewport, classNames?.content),\n      }),\n      [className, classNames?.arrow, classNames?.container, classNames?.content, classNames?.root],\n    );\n\n    const resolvedStyleProps = useMemo(() => {\n      if (typeof styleProps === 'function') return undefined;\n      return styleProps;\n    }, [styleProps]);\n\n    const resolvedStyles = useMemo(\n      () => ({\n        arrow: resolvedStyleProps?.arrow,\n        popup: {\n          ...resolvedStyleProps?.root,\n          ...resolvedStyleProps?.container,\n        },\n        positioner: {\n          zIndex: zIndex ?? 114_514,\n        },\n        viewport: resolvedStyleProps?.content,\n      }),\n      [resolvedStyleProps, zIndex],\n    );\n\n    const triggerElement = useMemo(() => {\n      const baseTriggerProps = {\n        closeDelay: resolvedCloseDelay,\n        delay: resolvedOpenDelay,\n        disabled,\n        ...triggerProps,\n      };\n\n      if (isValidElement(children)) {\n        return (\n          <BaseTooltip.Trigger\n            {...baseTriggerProps}\n            render={(props) => {\n              // Base UI's trigger props include `type=\"button\"` by default.\n              // If we render into a non-<button> element, that prop is invalid and can warn.\n              const resolvedProps = (() => {\n                if (isNativeButtonTriggerElement) return props as any;\n                // eslint-disable-next-line unused-imports/no-unused-vars\n                const { type, ref: triggerRef, ...triggerRest } = props as any;\n                return triggerRest;\n              })();\n\n              const mergedProps = mergeProps(restProps, (children as any).props, resolvedProps);\n              return cloneElement(children as any, {\n                ...mergedProps,\n                ref: mergeRefs([\n                  (children as any).ref,\n                  (props as any).ref,\n                  refProp,\n                  triggerCallbackRef,\n                ]),\n              });\n            }}\n          />\n        );\n      }\n\n      return (\n        <BaseTooltip.Trigger {...baseTriggerProps} ref={mergeRefs([refProp, triggerCallbackRef])}>\n          {children}\n        </BaseTooltip.Trigger>\n      );\n    }, [\n      children,\n      disabled,\n      isNativeButtonTriggerElement,\n      refProp,\n      resolvedCloseDelay,\n      resolvedOpenDelay,\n      restProps,\n      triggerCallbackRef,\n      triggerProps,\n    ]);\n\n    const customContainer = useMemo(() => {\n      if (popupContainer) return popupContainer;\n      if (!getPopupContainer || !isClient || !triggerNode) return undefined;\n      return getPopupContainer(triggerNode);\n    }, [popupContainer, getPopupContainer, isClient, triggerNode]);\n\n    const popup = useMemo(\n      () => (\n        <BaseTooltip.Positioner\n          align={placementConfig.align}\n          className={resolvedClassNames.positioner}\n          data-placement={placement}\n          side={placementConfig.side}\n          sideOffset={baseSideOffset}\n          style={resolvedStyles.positioner}\n          {...positionerProps}\n        >\n          <BaseTooltip.Popup\n            className={resolvedClassNames.popup}\n            style={resolvedStyles.popup}\n            {...popupProps}\n          >\n            {arrow && (\n              <BaseTooltip.Arrow className={resolvedClassNames.arrow} style={resolvedStyles.arrow}>\n                {TooltipArrowIcon}\n              </BaseTooltip.Arrow>\n            )}\n            <div className={resolvedClassNames.viewport} style={resolvedStyles.viewport}>\n              <TooltipContent hotkey={hotkey} hotkeyProps={hotkeyProps} title={title} />\n            </div>\n          </BaseTooltip.Popup>\n        </BaseTooltip.Positioner>\n      ),\n      [\n        arrow,\n        baseSideOffset,\n        hotkey,\n        hotkeyProps,\n        placement,\n        placementConfig.align,\n        placementConfig.side,\n        popupProps,\n        positionerProps,\n        resolvedClassNames,\n        resolvedStyles,\n        title,\n      ],\n    );\n\n    if (title == null && !hotkey) {\n      return children;\n    }\n\n    const resolvedPortalContainer = customContainer ?? portalContainer;\n\n    return (\n      <BaseTooltip.Root\n        defaultOpen={defaultOpen}\n        disabled={disabled}\n        open={resolvedOpen}\n        onOpenChange={handleOpenChange}\n      >\n        {triggerElement}\n        {resolvedPortalContainer ? (\n          <BaseTooltip.Portal container={resolvedPortalContainer} {...portalProps}>\n            {popup}\n          </BaseTooltip.Portal>\n        ) : null}\n      </BaseTooltip.Root>\n    );\n  },\n);\n\nTooltipStandalone.displayName = 'TooltipStandalone';\n"],"mappings":"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"}