{"version":3,"file":"rdk.umd.cjs","sources":["../src/ExitListener/useExitListener.tsx","../src/Overlay/OverlayContext.ts","../src/utils/useId.ts","../src/utils/useUnmount.ts","../src/Portal/Portal.ts","../src/Overlay/OverlayPortal/OverlayPortal.tsx","../src/Backdrop/Backdrop.tsx","../src/Overlay/GlobalOverlay/GlobalOverlay.tsx","../src/Overlay/OverlayTrigger.tsx","../src/Position/usePosition.tsx","../src/utils/CloneElement.tsx","../src/utils/useUserSelect.ts","../src/utils/useCursor.ts","../src/Overlay/ConnectedOverlay/ConnectedOverlayContent.tsx","../src/Overlay/ConnectedOverlay/ConnectedOverlay.tsx","../src/Overlay/useOverlay.tsx"],"sourcesContent":["import { RefObject, useEffect } from 'react';\n\ninterface ExitListenerOptions {\n  /**\n   * A ref object pointing to the target element that the hook should\n   * observe for click outside and escape key events.\n   */\n  ref: RefObject<HTMLElement | null>;\n\n  /**\n   * An optional boolean to enable or disable the event listeners.\n   * When set to true (default), the event listeners are active.\n   */\n  open?: boolean;\n\n  /**\n   * An optional callback function that is called when a click\n   * event occurs outside the target element.\n   */\n  onClickOutside?: (event: MouseEvent) => void;\n\n  /**\n   * An optional callback function that is called\n   * when the 'Escape' key is pressed.\n   */\n  onEscape?: (event: KeyboardEvent) => void;\n}\n\nexport const useExitListener = ({\n  ref,\n  open = true,\n  onClickOutside,\n  onEscape\n}: ExitListenerOptions) => {\n  useEffect(() => {\n    if (!open) {\n      return;\n    }\n\n    const handleClick = (event: MouseEvent | TouchEvent) => {\n      if (ref.current && !ref.current.contains(event.target as Node)) {\n        onClickOutside?.(event as MouseEvent);\n      }\n    };\n\n    const handleKey = (event: KeyboardEvent) => {\n      if (event.code === 'Escape') {\n        onEscape?.(event);\n      }\n    };\n\n    if (onClickOutside) {\n      document.addEventListener('mousedown', handleClick);\n      document.addEventListener('touchstart', handleClick);\n    }\n\n    if (onEscape) {\n      document.addEventListener('keydown', handleKey);\n    }\n\n    return () => {\n      if (onClickOutside) {\n        document.removeEventListener('mousedown', handleClick);\n        document.removeEventListener('touchstart', handleClick);\n      }\n\n      if (onEscape) {\n        document.removeEventListener('keydown', handleKey);\n      }\n    };\n  }, [ref, onClickOutside, onEscape, open]);\n};\n","import { createContext } from 'react';\n\nexport interface OverlayContextValue {\n  /**\n   * Closes current overlay.\n   */\n  close(): void;\n}\n\nexport const OverlayContext = createContext<OverlayContextValue>({\n  close: () => undefined\n});\n","import { useState } from 'react';\n\nlet id = 0;\nconst genId = () => `ref-${++id}`;\n\n/**\n * Auto-generate a id.\n * Inspired by: https://github.com/reach/reach-ui/blob/master/packages/auto-id/src/index.ts\n */\nexport const useId = (idFromProps?: string | null) => {\n  const [id] = useState(idFromProps || genId());\n  return `${id}`;\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useUnmount = fn => {\n  const fnRef = useRef(fn);\n  fnRef.current = fn;\n  useLayoutEffect(() => () => fnRef.current(), []);\n};\n","import {\n  useImperativeHandle,\n  forwardRef,\n  FC,\n  PropsWithChildren,\n  useLayoutEffect,\n  useRef,\n  Ref,\n  useEffect\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { useUnmount } from '../utils/useUnmount';\n\nexport interface PortalProps extends PropsWithChildren {\n  element?: string;\n  className?: string;\n  onMount?: () => void;\n  onUnmount?: () => void;\n}\n\nexport const Portal: FC<PortalProps & { ref?: Ref<HTMLElement> }> = forwardRef(\n  ({ children, className, element = 'div', onMount, onUnmount }, ref) => {\n    const elementRef = useRef<HTMLElement | null>(null);\n    const mounted = useRef<boolean>(false);\n\n    useEffect(() => {\n      if (className && elementRef.current) {\n        elementRef.current.setAttribute('class', `${className} rdk-portal`);\n      }\n    }, [className, elementRef.current]);\n\n    useLayoutEffect(() => {\n      // Create ref to created element once, on mount\n      elementRef.current = document.createElement(element);\n      onMount?.();\n    }, []);\n\n    useUnmount(() => {\n      onUnmount?.();\n      const ref = elementRef.current;\n      if (ref && document.body.contains(ref)) {\n        document.body.removeChild(ref);\n      }\n    });\n\n    useImperativeHandle(ref, () => elementRef.current!);\n\n    if (!elementRef.current) {\n      return null;\n    }\n\n    if (!mounted.current) {\n      mounted.current = true;\n      elementRef.current.classList.add('rdk-portal');\n      document.body.appendChild(elementRef.current);\n    }\n\n    return createPortal(children, elementRef.current) as JSX.Element;\n  }\n);\n","import React, {\n  FC,\n  forwardRef,\n  Ref,\n  useImperativeHandle,\n  useRef,\n  useState\n} from 'react';\nimport { useId } from '../../utils/useId';\nimport { Portal } from '../../Portal';\n\n// NOTE: This should not be used by external consumers.\nexport const portals: string[] = [];\n\nconst START_INDEX = 990;\n\nexport interface OverlayPortalRef {\n  ref?: Ref<HTMLElement>;\n}\n\nexport interface OverlayPortalMountEvent {\n  overlayIndex: number;\n  portalIndex: number;\n  portalId: string;\n  backdropIndex: number;\n}\n\nexport interface OverlayPortalProps {\n  appendToBody?: boolean;\n  className?: string;\n  id?: string;\n  children: (props: OverlayPortalMountEvent) => any;\n  onMount?: (event: OverlayPortalMountEvent) => void;\n  onUnmount?: () => void;\n}\n\nexport const OverlayPortal: FC<\n  OverlayPortalProps & OverlayPortalRef\n> = forwardRef(\n  ({ className, children, onMount, onUnmount, appendToBody, id }, ref) => {\n    let portalId = useId(id);\n\n    const [portalIndex, setPortalIndex] = useState<number | null>(null);\n    const [overlayIndex, setOverlayIndex] = useState<number | null>(null);\n    const portalRef = useRef<any | null>(null);\n\n    useImperativeHandle(ref, () => portalRef.current);\n\n    return (\n      <Portal\n        className={className}\n        ref={portalRef}\n        appendToBody={appendToBody}\n        onMount={() => {\n          portals.push(portalId);\n\n          let pidx = portals.indexOf(portalId);\n          setPortalIndex(pidx);\n\n          const overlayIdx = START_INDEX + pidx * 2 + 1;\n          setOverlayIndex(overlayIdx);\n\n          onMount?.({\n            portalId,\n            overlayIndex: overlayIdx,\n            portalIndex: pidx,\n            backdropIndex: overlayIdx\n          });\n        }}\n        onUnmount={() => {\n          onUnmount?.();\n          portals.splice(portals.indexOf(portalId), 1);\n          setPortalIndex(null);\n          setOverlayIndex(null);\n        }}\n      >\n        {children({\n          overlayIndex: overlayIndex as number,\n          portalIndex: portalIndex as number,\n          backdropIndex: overlayIndex as number,\n          portalId\n        })}\n      </Portal>\n    );\n  }\n);\n\nOverlayPortal.defaultProps = {\n  appendToBody: true\n};\n","import React, { FC, MouseEvent } from 'react';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\nimport css from './Backdrop.module.css';\n\nexport interface BackdropProps {\n  zIndex?: number;\n  portalIndex?: number;\n  className?: string;\n  onClick?: (event: MouseEvent) => void;\n}\n\nexport const Backdrop: FC<BackdropProps> = ({\n  portalIndex,\n  zIndex,\n  className,\n  onClick\n}) => (\n  <motion.div\n    className={classNames(css.backdrop, className)}\n    initial={{ opacity: 0 }}\n    animate={{ opacity: 0.8 - (portalIndex as number) / 10 }}\n    exit={{ opacity: 0 }}\n    style={{ zIndex }}\n    onClick={onClick}\n  />\n);\n\nBackdrop.defaultProps = {\n  zIndex: 998,\n  portalIndex: 0\n};\n","import React, { FC, Fragment, useCallback, useEffect, useRef } from 'react';\nimport {\n  disableBodyScroll,\n  clearAllBodyScrollLocks\n} from 'body-scroll-lock-upgrade';\nimport { OverlayContext } from '../OverlayContext';\nimport { AnimatePresence } from 'framer-motion';\nimport { OverlayPortal } from '../OverlayPortal';\nimport { useExitListener } from '../../ExitListener';\nimport { Backdrop } from '../../Backdrop';\n\nexport interface GlobalOverlayProps {\n  children?: any;\n  open: boolean;\n  closeOnBackdropClick?: boolean;\n  hasBackdrop?: boolean;\n  backdropClassName?: string;\n  closeOnEscape?: boolean;\n  onClose?: () => void;\n}\n\nexport const GlobalOverlay: FC<GlobalOverlayProps> = ({\n  open,\n  hasBackdrop = true,\n  closeOnEscape = true,\n  closeOnBackdropClick = true,\n  backdropClassName,\n  children,\n  onClose\n}) => {\n  const overlayRef = useRef<any | null>(null);\n\n  const onBackdropClick = useCallback(() => {\n    if (closeOnBackdropClick) {\n      onClose?.();\n    }\n  }, [closeOnBackdropClick, onClose]);\n\n  useExitListener({\n    ref: overlayRef,\n    open,\n    onEscape: () => closeOnEscape && onClose?.()\n  });\n\n  useEffect(() => {\n    if (open && overlayRef.current !== undefined) {\n      disableBodyScroll(overlayRef.current, {\n        // allowTouchMove determines which elements to allow touchmove events for iOS https://github.com/rick-liruixin/body-scroll-lock-upgrade?tab=readme-ov-file#allowtouchmove\n        //@ts-expect-error: allowTouchMove is typed wrong: https://github.com/rick-liruixin/body-scroll-lock-upgrade/issues/21\n        allowTouchMove: (el: HTMLElement) => {\n          while (el && el !== document.body) {\n            if (el.getAttribute('body-scroll-lock-ignore') !== null) {\n              return true;\n            }\n            if (el.parentElement !== null) {\n              el = el.parentElement;\n            }\n          }\n          return false;\n        }\n      });\n    } else {\n      clearAllBodyScrollLocks();\n    }\n\n    return () => {\n      clearAllBodyScrollLocks();\n    };\n  }, [children, open]);\n\n  return (\n    <OverlayContext.Provider value={{ close: () => onClose?.() }}>\n      <AnimatePresence>\n        {open && (\n          <OverlayPortal ref={overlayRef}>\n            {({ overlayIndex, portalIndex }) => (\n              <Fragment>\n                {hasBackdrop && (\n                  <Backdrop\n                    zIndex={overlayIndex as number}\n                    portalIndex={portalIndex as number}\n                    onClick={onBackdropClick}\n                    className={backdropClassName}\n                  />\n                )}\n                <div body-scroll-lock-ignore=\"true\">\n                  {children({ overlayIndex, portalIndex })}\n                </div>\n              </Fragment>\n            )}\n          </OverlayPortal>\n        )}\n      </AnimatePresence>\n    </OverlayContext.Provider>\n  );\n};\n","import React, { useCallback, forwardRef, Ref, FC } from 'react';\n\nexport type TriggerTypes = 'hover' | 'click' | 'contextmenu' | 'focus' | 'key';\n\nexport interface OverlayTriggerEvent {\n  type: TriggerTypes;\n  nativeEvent: any;\n}\n\nexport interface OverlayTriggerProps {\n  children?: any;\n  className?: string;\n  elementType?: any;\n  trigger: TriggerTypes | TriggerTypes[];\n  onOpen?: (event: OverlayTriggerEvent) => void;\n  onClose?: (event: OverlayTriggerEvent) => void;\n}\n\nexport const OverlayTrigger: FC<\n  OverlayTriggerProps & {\n    ref: Ref<HTMLSpanElement>;\n  }\n> = forwardRef(\n  (\n    {\n      children,\n      className,\n      elementType = 'span',\n      trigger = ['click'],\n      onOpen = () => undefined,\n      onClose = () => undefined\n    },\n    ref\n  ) => {\n    const hasTrigger = useCallback(\n      (type: TriggerTypes) => {\n        if (Array.isArray(trigger)) {\n          return trigger.includes(type);\n        } else {\n          return type === trigger;\n        }\n      },\n      [trigger]\n    );\n\n    const onFocus = useCallback(\n      event => {\n        if (hasTrigger('focus')) {\n          onOpen({ type: 'focus', nativeEvent: event });\n        }\n      },\n      [onOpen, hasTrigger]\n    );\n\n    const onBlur = useCallback(\n      event => {\n        if (hasTrigger('focus')) {\n          onClose({ type: 'focus', nativeEvent: event });\n        }\n      },\n      [onClose, hasTrigger]\n    );\n\n    const onMouseEnter = useCallback(\n      event => {\n        if (hasTrigger('hover')) {\n          onOpen({ type: 'hover', nativeEvent: event });\n        }\n      },\n      [onOpen, hasTrigger]\n    );\n\n    const onMouseLeave = useCallback(\n      event => {\n        if (hasTrigger('hover')) {\n          onClose({ type: 'hover', nativeEvent: event });\n        }\n      },\n      [onClose, hasTrigger]\n    );\n\n    const onClick = useCallback(\n      event => {\n        if (hasTrigger('click')) {\n          onOpen({ type: 'click', nativeEvent: event });\n        }\n\n        // Kill the tooltip on click if its not a click listener\n        if (!hasTrigger('click')) {\n          onClose({ type: 'hover', nativeEvent: event });\n        }\n      },\n      [onOpen, onClose, hasTrigger]\n    );\n\n    const onContextMenu = useCallback(\n      event => {\n        if (hasTrigger('contextmenu')) {\n          event.preventDefault();\n          onOpen({ type: 'contextmenu', nativeEvent: event });\n        }\n      },\n      [onOpen]\n    );\n\n    const tabIndex = hasTrigger('focus') ? -1 : undefined;\n    const Component = elementType;\n\n    return (\n      <Component\n        ref={ref}\n        tabIndex={tabIndex}\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        onClick={onClick}\n        onContextMenu={onContextMenu}\n        className={className}\n      >\n        {children}\n      </Component>\n    );\n  }\n);\n","import { useRef, useLayoutEffect, RefObject, useMemo } from 'react';\nimport PopperJS from 'popper.js';\n\nexport type Placement = PopperJS.Placement;\n\nexport type ReferenceProp =\n  | ReferenceObject\n  | HTMLElement\n  | RefObject<HTMLElement>;\n\nexport interface ReferenceObject {\n  top: number;\n  left: number;\n  height: number;\n  width: number;\n}\n\nexport interface PositionOptions {\n  placement?: Placement;\n  modifiers?: PopperJS.Modifiers;\n  followCursor?: boolean;\n}\n\nexport const usePosition = (\n  reference: ReferenceProp,\n  { followCursor, placement, modifiers }: PositionOptions = {}\n) => {\n  const elementRef = useRef<any | null>(null);\n  const popper = useRef<PopperJS | null>(null);\n  const mouse = useRef<{ pageX: number; pageY: number }>({\n    pageX: 0,\n    pageY: 0\n  });\n\n  // Find the real reference pointer for updating\n  const refPointer = (reference as RefObject<HTMLElement>).current;\n\n  const popperRef = useMemo(() => {\n    const refObj = reference as RefObject<HTMLElement>;\n    if (refObj.current !== undefined) {\n      return refObj.current;\n    }\n\n    const refElement = reference as HTMLElement;\n    if (followCursor) {\n      return {\n        getBoundingClientRect: () => ({\n          top: mouse.current.pageY,\n          right: mouse.current.pageX,\n          bottom: mouse.current.pageY,\n          left: mouse.current.pageX,\n          width: 0,\n          height: 0\n        }),\n        clientWidth: 0,\n        clientHeight: 0\n      };\n    } else if (refElement && !refElement.getBoundingClientRect) {\n      const { top, left, width, height } = reference as ReferenceObject;\n\n      return {\n        getBoundingClientRect: () => ({\n          top,\n          left,\n          width,\n          bottom: top - height,\n          right: left - width,\n          height\n        }),\n        clientWidth: width,\n        clientHeight: height\n      };\n    }\n\n    return refElement;\n  }, [followCursor, reference, refPointer, mouse]);\n\n  useLayoutEffect(() => {\n    let rqf;\n\n    const onMouseMove = ({ pageX, pageY }: MouseEvent) => {\n      mouse.current = { pageX, pageY };\n      popper.current?.scheduleUpdate();\n    };\n\n    const onWindowScroll = () => {\n      rqf = requestAnimationFrame(() => {\n        popper.current?.scheduleUpdate();\n      });\n    };\n\n    if (elementRef.current && popperRef) {\n      //@ts-ignore\n      popper.current = new PopperJS(popperRef, elementRef.current, {\n        placement: placement || 'top',\n        modifiers: modifiers || {},\n        onCreate: () => {\n          window.addEventListener('scroll', onWindowScroll);\n\n          if (followCursor) {\n            window.addEventListener('mousemove', onMouseMove);\n          }\n        }\n      });\n    }\n\n    return () => {\n      if (!elementRef.current) {\n        popper.current?.destroy();\n\n        cancelAnimationFrame(rqf);\n        window.removeEventListener('scroll', onWindowScroll);\n\n        if (followCursor) {\n          window.removeEventListener('mousemove', onMouseMove);\n        }\n      }\n    };\n  }, [elementRef.current]);\n\n  useLayoutEffect(() => {\n    if (popper.current) {\n      popper.current.reference = popperRef as any;\n      popper.current.scheduleUpdate();\n    }\n  }, [popperRef]);\n\n  return [elementRef, popper];\n};\n","import { cloneElement, useMemo } from 'react';\nimport classNames from 'classnames';\n\ninterface CloneElementProps {\n  element: any;\n  children?: any;\n  childRef?: any;\n}\n\n/**\n * CloneElement is a wrapper component for createElement function.\n * This allows you to describe your cloning element declaratively\n * which is a more natural API for React.\n */\nexport function CloneElement<T = any>({\n  children,\n  element,\n  childRef,\n  ...rest\n}: CloneElementProps & Partial<T>) {\n  const getProjectedProps = useMemo(\n    () => props => {\n      const childProps = element.props;\n\n      return Object.keys(props).reduce((acc, key) => {\n        const prop = props[key];\n        const childProp = childProps[key];\n\n        if (typeof prop === 'function' && typeof childProp === 'function') {\n          acc[key] = (...args) => {\n            prop(...args);\n            childProp(...args);\n          };\n        } else if (key === 'className') {\n          acc[key] = classNames(prop, childProp);\n        } else {\n          acc[key] = prop;\n        }\n\n        return acc;\n      }, {});\n    },\n    [rest]\n  );\n\n  if (element === null) {\n    return children;\n  }\n\n  // Tricky logic around functional vs class components\n  const ref = childRef\n    ? node => {\n        if (typeof childRef === 'function') {\n          childRef(node);\n        } else if (ref) {\n          childRef.current = node;\n        }\n      }\n    : undefined;\n\n  const newProps = getProjectedProps(rest);\n  return cloneElement(element, {\n    ...element.props,\n    ...newProps,\n    children,\n    ref\n  });\n}\n","import { useEffect } from 'react';\n\n/**\n * Set the body select style to none.\n */\nexport function useUserSelect(active: boolean) {\n  useEffect(() => {\n    if (active) {\n      document.body.style.userSelect = 'none';\n      return () => void (document.body.style.userSelect = 'initial');\n    }\n  }, [active]);\n}\n","import React from 'react';\n\n/**\n * Hook for setting body cursors.\n * Credits: https://github.com/pmndrs/drei#usecursor\n */\nexport function useCursor(\n  hovered: boolean,\n  onPointerOver = 'pointer',\n  onPointerOut = 'auto'\n) {\n  React.useEffect(() => {\n    if (hovered) {\n      document.body.style.cursor = onPointerOver;\n      return () => void (document.body.style.cursor = onPointerOut);\n    }\n  }, [hovered]);\n}\n","import React, {\n  FC,\n  forwardRef,\n  Ref,\n  useImperativeHandle,\n  RefObject,\n  useEffect,\n  useState,\n  useCallback\n} from 'react';\nimport { useExitListener } from '../../ExitListener';\nimport { Placement, usePosition } from '../../Position';\nimport { OverlayPortal, portals } from '../OverlayPortal';\nimport { useId } from '../../utils';\n\nexport interface ConnectedOverlayContentRef {\n  updatePosition: () => void;\n}\n\nexport interface ConnectedOverlayContentProps {\n  modifiers?: any;\n  followCursor?: boolean;\n  portalClassName?: string;\n  placement?: Placement;\n  triggerRef: any;\n  children: any;\n  closeOnBodyClick?: boolean;\n  closeOnEscape?: boolean;\n  elementType?: any;\n  appendToBody?: boolean;\n  onClose?: (event?: any) => void;\n}\n\nexport const ConnectedOverlayContent: FC<\n  ConnectedOverlayContentProps & {\n    ref?: Ref<ConnectedOverlayContentRef>;\n  }\n> = forwardRef(\n  (\n    {\n      triggerRef,\n      children,\n      portalClassName,\n      closeOnBodyClick,\n      closeOnEscape,\n      elementType,\n      appendToBody,\n      followCursor,\n      modifiers,\n      placement,\n      onClose\n    },\n    ref\n  ) => {\n    const id = useId();\n    const [overlayIndex, setOverlayIndex] = useState<number | null>(null);\n    const [positionRef, popperRef] = usePosition(triggerRef, {\n      followCursor,\n      modifiers,\n      placement\n    });\n\n    useImperativeHandle(ref, () => ({\n      updatePosition: () => {\n        popperRef?.current?.scheduleUpdate();\n      }\n    }));\n\n    const onClickOutside = useCallback(\n      (event: any) => {\n        if (closeOnBodyClick) {\n          // don't fire if i click the clicker\n          let ref: HTMLElement | null = null;\n          if ((triggerRef as RefObject<HTMLElement>).current) {\n            ref = (triggerRef as RefObject<HTMLElement>).current as HTMLElement;\n          } else if ((triggerRef as HTMLElement).contains !== undefined) {\n            ref = triggerRef as HTMLElement;\n          }\n\n          // Handle parent click containers\n          const container = event.target.closest('.rdk-portal');\n\n          // Only close the last one\n          const isLast = portals.indexOf(id) === portals.length - 1;\n\n          if (!ref?.contains(event.target) && (isLast || !container)) {\n            onClose?.(event);\n          }\n        }\n      },\n      [closeOnBodyClick, onClose]\n    );\n\n    const onEscape = useCallback(() => {\n      if (closeOnEscape) {\n        onClose?.();\n      }\n    }, [closeOnEscape, onClose]);\n\n    useExitListener({\n      open: true,\n      ref: positionRef,\n      onClickOutside,\n      onEscape\n    });\n\n    useEffect(() => {\n      if (positionRef && overlayIndex) {\n        positionRef.current.style.zIndex = overlayIndex;\n      }\n    }, [positionRef.current, overlayIndex]);\n\n    return (\n      <OverlayPortal\n        id={id}\n        ref={positionRef}\n        className={portalClassName}\n        elementType={elementType}\n        appendToBody={appendToBody}\n        onMount={event => setOverlayIndex(event.overlayIndex)}\n        onUnmount={() => setOverlayIndex(null)}\n      >\n        {children}\n      </OverlayPortal>\n    );\n  }\n);\n\nConnectedOverlayContent.defaultProps = {\n  closeOnBodyClick: true,\n  closeOnEscape: true,\n  appendToBody: true,\n  placement: 'bottom'\n};\n","import React, {\n  FC,\n  useRef,\n  useEffect,\n  Fragment,\n  forwardRef,\n  Ref,\n  useImperativeHandle,\n  useMemo\n} from 'react';\nimport { TriggerTypes, OverlayTrigger } from '../OverlayTrigger';\nimport { Placement, ReferenceProp } from '../../Position';\nimport { AnimatePresence } from 'framer-motion';\nimport { OverlayContext } from '../../Overlay/OverlayContext';\nimport {\n  ConnectedOverlayContent,\n  ConnectedOverlayContentRef\n} from './ConnectedOverlayContent';\n\nexport interface OverlayEvent {\n  /**\n   * Type of the event.\n   */\n  type: TriggerTypes;\n\n  /**\n   * Native event object.\n   */\n  nativeEvent: any;\n}\n\nexport interface ConnectedOverlayProps {\n  /**\n   * Whether the overlay should be visible.\n   */\n  open: boolean;\n\n  /**\n   * Reference of the overlay to align to.\n   */\n  reference?: ReferenceProp;\n\n  /**\n   * The content of the overlay.\n   */\n  children?: any;\n\n  /**\n   * Content to render in the overlay.\n   */\n  content: any;\n\n  /**\n   * Type of trigger to open the overlay.\n   */\n  trigger?: TriggerTypes[] | TriggerTypes;\n\n  /**\n   * Trigger element to open the overlay.\n   */\n  triggerElement?: any;\n\n  /**\n   * Trigger classname.\n   */\n  triggerClassName?: string;\n\n  /**\n   * Portal classname.\n   */\n  portalClassName?: string;\n\n  /**\n   * Close when the body is clicked or not.\n   */\n  closeOnBodyClick?: boolean;\n\n  /**\n   * Close when escape is pressed or not.\n   */\n  closeOnEscape?: boolean;\n\n  /**\n   * Append the overlay to the body. Almost always want this.\n   */\n  appendToBody?: boolean;\n\n  /**\n   * Overlay element type.\n   */\n  elementType?: string;\n\n  /**\n   * Position modifiers.\n   */\n  modifiers?: any;\n\n  /**\n   * Overlay should follow cursor or not.\n   */\n  followCursor?: boolean;\n\n  /**\n   * Placement of the overlay.\n   */\n  placement?: Placement;\n\n  /**\n   * Event called when the overlay is opened.\n   */\n  onOpen?: (event?: any) => void;\n\n  /**\n   * Event called when the overlay is closed.\n   */\n  onClose?: (event?: any) => void;\n}\n\nexport const ConnectedOverlay: FC<\n  ConnectedOverlayProps & {\n    ref?: Ref<ConnectedOverlayContentRef>;\n  }\n> = forwardRef(\n  (\n    {\n      reference,\n      children,\n      open,\n      content,\n      triggerElement,\n      triggerClassName,\n      trigger,\n      onOpen,\n      onClose,\n      ...rest\n    },\n    ref\n  ) => {\n    const mounted = useRef<boolean>(false);\n    const overlayTriggerRef = useRef<any | null>(null);\n    const contentRef = useRef<any | null>(null);\n    const triggerRef = reference || overlayTriggerRef;\n\n    useImperativeHandle(ref, () => ({\n      updatePosition: () => {\n        contentRef.current?.updatePosition();\n      }\n    }));\n\n    useEffect(() => {\n      if (mounted.current) {\n        if (!open) {\n          onClose?.();\n        } else {\n          onOpen?.();\n        }\n      }\n    }, [open]);\n\n    useEffect(() => {\n      if (!mounted.current) {\n        mounted.current = true;\n      }\n    });\n\n    const providerValue = useMemo(\n      () => ({\n        close: () => onClose?.()\n      }),\n      [onClose]\n    );\n\n    return (\n      <OverlayContext.Provider value={providerValue}>\n        {children && (\n          <Fragment>\n            {trigger ? (\n              <OverlayTrigger\n                elementType={triggerElement}\n                ref={overlayTriggerRef}\n                className={triggerClassName}\n                trigger={trigger}\n                onOpen={onOpen}\n                onClose={onClose}\n              >\n                {children}\n              </OverlayTrigger>\n            ) : (\n              children\n            )}\n          </Fragment>\n        )}\n        <AnimatePresence>\n          {open && (\n            <ConnectedOverlayContent\n              {...rest}\n              ref={contentRef}\n              triggerRef={triggerRef}\n              onClose={onClose}\n            >\n              {content}\n            </ConnectedOverlayContent>\n          )}\n        </AnimatePresence>\n      </OverlayContext.Provider>\n    );\n  }\n);\n\nConnectedOverlay.defaultProps = {\n  trigger: 'click' as TriggerTypes\n};\n","import { useContext } from 'react';\nimport { OverlayContext } from './OverlayContext';\n\nexport const useOverlay = () => {\n  const context = useContext(OverlayContext);\n\n  if (context === undefined) {\n    throw new Error(\n      '`useOverlay` hook can only be used inside a overlay component.'\n    );\n  }\n\n  return context;\n};\n"],"names":["useEffect","createContext","id","useState","useRef","useLayoutEffect","forwardRef","ref","useImperativeHandle","createPortal","jsx","motion","useCallback","disableBodyScroll","clearAllBodyScrollLocks","AnimatePresence","jsxs","Fragment","useMemo","cloneElement","useContext"],"mappings":"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"}