{"version":3,"file":"index.mjs","names":["CloseButton","Container","Arrow","Wrapper","Portal"],"sources":["../src/literals.ts","../src/components/Floater/Arrow.tsx","../src/components/Floater/CloseButton.tsx","../src/components/Floater/Container.tsx","../src/components/Floater/index.tsx","../src/modules/helpers.ts","../src/modules/hooks.ts","../src/components/Portal.tsx","../src/components/Wrapper.tsx","../src/modules/styles.ts","../src/modules/useFloater.ts","../src/index.tsx"],"sourcesContent":["export const POSITIONING_PROPS = ['position', 'top', 'right', 'bottom', 'left'] as const;\n\nexport const STATUS = {\n  INIT: 'init',\n  IDLE: 'idle',\n  RENDER: 'render',\n  OPENING: 'opening',\n  OPEN: 'open',\n  CLOSING: 'closing',\n  ERROR: 'error',\n} as const;\n","import { CSSProperties, ReactNode, Ref } from 'react';\n\nimport { Styles } from '../../types';\n\ninterface Props {\n  arrow?: ReactNode;\n  arrowRef: Ref<HTMLSpanElement>;\n  placement: string;\n  styles: Styles;\n}\n\nexport default function FloaterArrow(props: Props) {\n  const { arrow, arrowRef, placement, styles } = props;\n  const {\n    arrow: { base, color, display, position, size },\n  } = styles;\n  const arrowStyles: CSSProperties = { display, position };\n\n  let points;\n  let x = base;\n  let y = size;\n\n  if (placement.startsWith('top')) {\n    points = `0,0 ${x / 2},${y} ${x},0`;\n  } else if (placement.startsWith('bottom')) {\n    points = `${x},${y} ${x / 2},0 0,${y}`;\n  } else if (placement.startsWith('left')) {\n    y = base;\n    x = size;\n    points = `0,0 ${x},${y / 2} 0,${y}`;\n  } else if (placement.startsWith('right')) {\n    y = base;\n    x = size;\n    points = `${x},${y} ${x},0 0,${y / 2}`;\n  }\n\n  if (arrow) {\n    return (\n      <span\n        ref={arrowRef}\n        style={{\n          color,\n          height: placement.startsWith('left') || placement.startsWith('right') ? base : size,\n          width: placement.startsWith('left') || placement.startsWith('right') ? size : base,\n        }}\n      >\n        {arrow}\n      </span>\n    );\n  }\n\n  return (\n    <span ref={arrowRef} className=\"__floater__arrow\" style={arrowStyles}>\n      <svg height={y} version=\"1.1\" width={x} xmlns=\"http://www.w3.org/2000/svg\">\n        <polygon fill={color} points={points} />\n      </svg>\n    </span>\n  );\n}\n","import { CSSProperties } from 'react';\n\nimport { CloseFunction } from '../../types';\n\ninterface Props {\n  onClick: CloseFunction<HTMLButtonElement>;\n  styles: CSSProperties;\n}\n\nexport default function FloaterCloseButton({ onClick, styles }: Props) {\n  const { color, height, width, ...style } = styles;\n\n  return (\n    <button aria-label=\"close\" onClick={onClick} style={style} type=\"button\">\n      <svg\n        height={`${height}px`}\n        preserveAspectRatio=\"xMidYMid\"\n        version=\"1.1\"\n        viewBox=\"0 0 18 18\"\n        width={`${width}px`}\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <g>\n          <path\n            d=\"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z\"\n            fill={color}\n          />\n        </g>\n      </svg>\n    </button>\n  );\n}\n","import { isValidElement, ReactNode } from 'react';\nimport is from 'is-lite';\n\nimport { CloseFunction, Styles } from '../../types';\n\nimport CloseButton from './CloseButton';\n\ninterface Props {\n  content: ReactNode;\n  footer?: ReactNode;\n  onClick: CloseFunction<HTMLButtonElement>;\n  open?: boolean;\n  positionWrapper: boolean;\n  showCloseButton?: boolean;\n  styles: Styles;\n  title?: ReactNode;\n}\n\nexport default function FloaterContainer(props: Props) {\n  const { content, footer, onClick, open, positionWrapper, showCloseButton, styles, title } = props;\n\n  const output: Record<string, ReactNode> = {\n    content: isValidElement(content) ? (\n      content\n    ) : (\n      <div className=\"__floater__content\" style={styles.content}>\n        {content}\n      </div>\n    ),\n  };\n\n  if (title) {\n    output.title = isValidElement(title) ? (\n      title\n    ) : (\n      <div className=\"__floater__title\" style={styles.title}>\n        {title}\n      </div>\n    );\n  }\n\n  if (footer) {\n    output.footer = isValidElement(footer) ? (\n      footer\n    ) : (\n      <div className=\"__floater__footer\" style={styles.footer}>\n        {footer}\n      </div>\n    );\n  }\n\n  if ((showCloseButton || positionWrapper) && !is.boolean(open)) {\n    output.close = <CloseButton onClick={onClick} styles={styles.close} />;\n  }\n\n  return (\n    <div className=\"__floater__container\" style={styles.container}>\n      {output.close}\n      {output.title}\n      {output.content}\n      {output.footer}\n    </div>\n  );\n}\n","import { cloneElement, CSSProperties, isValidElement, ReactNode, Ref, useMemo } from 'react';\n\nimport { STATUS } from '../../literals';\nimport { CloseFunction, FloaterComponent, Statuses, Styles } from '../../types';\n\nimport Arrow from './Arrow';\nimport Container from './Container';\n\ninterface Props {\n  arrow?: ReactNode;\n  arrowRef: Ref<HTMLSpanElement>;\n  component?: FloaterComponent;\n  content?: ReactNode;\n  floaterRef: Ref<HTMLDivElement>;\n  footer?: ReactNode;\n  hideArrow: boolean;\n  id: string;\n  onClick: CloseFunction;\n  placement: string;\n  positionWrapper: boolean;\n  showCloseButton?: boolean;\n  status: Statuses;\n  styles: Styles;\n  title?: ReactNode;\n}\n\nexport default function Floater(props: Props) {\n  const {\n    component,\n    content,\n    floaterRef,\n    hideArrow,\n    id,\n    onClick: closeFn,\n    placement,\n    status,\n    styles,\n  } = props;\n\n  const style = useMemo(() => {\n    const {\n      arrow: { size },\n      floater,\n      floaterCentered,\n      floaterClosing,\n      floaterOpening,\n      floaterWithComponent,\n    } = styles;\n    let element: CSSProperties = { ...floater };\n\n    if (!hideArrow) {\n      if (placement.startsWith('top')) {\n        element.padding = `0 0 ${size}px`;\n      } else if (placement.startsWith('bottom')) {\n        element.padding = `${size}px 0 0`;\n      } else if (placement.startsWith('left')) {\n        element.padding = `0 ${size}px 0 0`;\n      } else if (placement.startsWith('right')) {\n        element.padding = `0 0 0 ${size}px`;\n      }\n    }\n\n    if (status === STATUS.CLOSING) {\n      element = { ...element, ...floaterClosing };\n    }\n\n    if (status === STATUS.OPENING || status === STATUS.OPEN) {\n      element = { ...element, ...floaterOpening };\n    }\n\n    if (placement === 'center') {\n      element = { ...element, ...floaterCentered };\n    }\n\n    if (component) {\n      element = { ...element, ...floaterWithComponent };\n    }\n\n    return element;\n  }, [component, hideArrow, placement, status, styles]);\n\n  const shouldRender = ['closing', 'open', 'opening', 'render'].includes(status);\n\n  const output: Record<string, ReactNode> = {};\n  const classes = ['__floater'];\n  const baseProps = { role: 'tooltip' };\n\n  if (component) {\n    const componentProps = { closeFn, id, ...baseProps };\n\n    output.content = isValidElement(component)\n      ? cloneElement(component, componentProps)\n      : (component(componentProps) as ReactNode);\n  } else {\n    output.content = <Container {...props} content={content} />;\n  }\n\n  if (status === STATUS.OPEN) {\n    classes.push('__floater__open');\n  }\n\n  if (!hideArrow) {\n    output.arrow = <Arrow {...props} />;\n  }\n\n  if (!shouldRender) {\n    return null;\n  }\n\n  return (\n    <div ref={floaterRef} id={id} style={{ zIndex: styles.options.zIndex }}>\n      <div className={classes.join(' ')} style={style} {...baseProps}>\n        <div className=\"__floater__body\">\n          {output.content}\n          {output.arrow}\n        </div>\n      </div>\n    </div>\n  );\n}\n","import { Modifier, Placement } from '@popperjs/core';\nimport { deepmerge } from 'deepmerge-ts';\nimport is from 'is-lite';\n\nimport { LogOptions, PopperModifiers, Props, SetRequired } from '../types';\n\nexport const portalId = 'react-floater-portal';\n\nexport function canUseDOM(): boolean {\n  return !!(typeof window !== 'undefined' && window.document?.createElement);\n}\n\nexport function enhanceProps(props: Props) {\n  return {\n    autoOpen: false,\n    debug: false,\n    disableFlip: false,\n    disableHoverToClick: false,\n    event: 'click',\n    eventDelay: 0.4,\n    hideArrow: false,\n    offset: 15,\n    placement: 'bottom',\n    showCloseButton: false,\n    styles: {},\n    target: null,\n    wrapperOptions: {\n      position: false,\n    },\n    ...props,\n  } satisfies SetRequired<Props, 'wrapperOptions'>;\n}\n\nexport function getFallbackPlacements(placement: Placement): Placement[] | undefined {\n  if (placement.startsWith('left')) {\n    return ['top', 'bottom'];\n  }\n\n  if (placement.startsWith('right')) {\n    return ['bottom', 'top'];\n  }\n\n  return undefined;\n}\n\nexport function getModifiers(modifiers?: PopperModifiers): PopperModifiers {\n  const defaultOptions = {\n    flip: {\n      name: 'flip',\n      enabled: true,\n      options: {\n        padding: 20,\n      },\n    },\n    preventOverflow: {\n      name: 'preventOverflow',\n      enabled: true,\n      options: {\n        padding: 10,\n      },\n    },\n  };\n\n  return deepmerge(defaultOptions, modifiers ?? {});\n}\n\nexport function isFixed(el: HTMLElement | null): boolean {\n  if (!el) {\n    return false;\n  }\n\n  const { nodeName } = el;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n\n  if (getComputedStyle(el).position === 'fixed') {\n    return true;\n  }\n\n  return el.parentNode instanceof HTMLElement ? isFixed(el.parentNode) : false;\n}\n\nexport function isMobile(): boolean {\n  return 'ontouchstart' in window && /Mobi/.test(navigator.userAgent);\n}\n\n/**\n * Log method calls if debug is enabled\n */\nexport function log({ data, debug = false, title }: LogOptions): void {\n  /* eslint-disable no-console */\n  const logFn = console.log;\n\n  if (debug && title && data) {\n    console.groupCollapsed(\n      `%creact-floater: ${title}`,\n      'color: #9b00ff; font-weight: bold; font-size: 12px;',\n    );\n\n    if (Array.isArray(data)) {\n      data.forEach(d => {\n        if (is.plainObject(d) && d.key) {\n          logFn.apply(console, [d.key, d.value]);\n        } else {\n          logFn.apply(console, [d]);\n        }\n      });\n    } else {\n      logFn.apply(console, [data]);\n    }\n\n    console.groupEnd();\n  }\n  /* eslint-enable */\n}\n\nexport function mergeModifier(\n  modifier: Partial<Modifier<any, any>>,\n  customModifier?: Partial<Modifier<any, any>>,\n): Partial<Modifier<any, any>> {\n  return deepmerge(modifier, customModifier ?? {});\n}\n\nexport function off(\n  element: Element,\n  eventType: string,\n  handler: EventListener,\n  options: boolean | EventListenerOptions = false,\n): void {\n  element.removeEventListener(eventType, handler, options);\n}\n\nexport function on(\n  element: HTMLElement,\n  eventType: string,\n  handler: EventListener,\n  options: boolean | EventListenerOptions = false,\n): void {\n  element.addEventListener(eventType, handler, options);\n}\n\nexport function once(\n  element: HTMLElement,\n  eventType: string,\n  handler: EventListener,\n  options: boolean | EventListenerOptions = false,\n): () => void {\n  let nextCB: EventListener;\n\n  // eslint-disable-next-line prefer-const\n  nextCB = event => {\n    handler(event);\n    off(element, eventType, nextCB);\n  };\n\n  on(element, eventType, nextCB, options);\n\n  return () => off(element, eventType, nextCB);\n}\n\nexport function randomId(): string {\n  return `rf-${Math.round(Math.random() * 1e5)}`;\n}\n","/* eslint-disable react-hooks/exhaustive-deps,react-compiler/react-compiler */\nimport { DependencyList, EffectCallback, useEffect, useRef } from 'react';\n\nfunction useEffectOnce(effect: EffectCallback) {\n  useEffect(effect, []);\n}\n\nexport function useMount(effect: EffectCallback) {\n  useEffectOnce(effect);\n}\n\nexport function useUnmount(fn: () => any): void {\n  const fnRef = useRef(fn);\n\n  // update the ref each render so if it changes the newest callback will be invoked\n  fnRef.current = fn;\n\n  useEffectOnce(() => () => fnRef.current());\n}\n\nexport function useUpdateEffect(effect: EffectCallback, deps?: DependencyList) {\n  const isFirst = useRef(true);\n\n  useEffect(() => {\n    if (isFirst.current) {\n      isFirst.current = false;\n\n      return undefined;\n    }\n\n    return effect();\n  }, deps);\n}\n","import { ReactNode, useCallback, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport is from 'is-lite';\n\nimport { portalId } from '../modules/helpers';\nimport { useMount, useUnmount } from '../modules/hooks';\nimport { Placement, SelectorOrElement } from '../types';\n\ninterface Props {\n  children: ReactNode;\n  hasChildren: boolean;\n  internalId: string;\n  placement: Placement;\n  portalElement?: SelectorOrElement;\n  target?: SelectorOrElement;\n  zIndex: string | number;\n}\n\nexport default function ReactFloaterPortal(props: Props) {\n  const { children, hasChildren, internalId, placement, portalElement, target, zIndex } = props;\n  const node = useRef<HTMLElement | null>(null);\n\n  const initialize = useCallback(() => {\n    if (portalElement) {\n      node.current = is.string(portalElement)\n        ? (document.querySelector(portalElement) as HTMLElement)\n        : portalElement;\n    }\n\n    if (!portalElement || !node.current) {\n      const portal = document.getElementById(portalId);\n\n      if (portal) {\n        const ids: string[] = portal.dataset.ids?.split(',').filter(Boolean) ?? [];\n\n        if (!ids.includes(internalId) && internalId) {\n          ids.push(internalId);\n        }\n\n        portal.dataset.ids = ids.join(',');\n        node.current = portal;\n      } else {\n        node.current = document.createElement('div');\n        node.current.id = portalId;\n        node.current.dataset.ids = internalId;\n        node.current.style.zIndex = `${zIndex}`;\n\n        document.body.appendChild(node.current);\n      }\n    }\n  }, [internalId, portalElement, zIndex]);\n\n  useMount(() => {\n    initialize();\n  });\n\n  useEffect(() => {\n    initialize();\n  }, [initialize]);\n\n  useUnmount(() => {\n    if (!node.current) {\n      return;\n    }\n\n    try {\n      if (node.current.id === portalId) {\n        const ids: string[] = node.current.dataset.ids?.split(',') ?? [];\n\n        const remainingIds = ids.filter(id => id !== internalId);\n\n        node.current.dataset.ids = remainingIds.join(',');\n\n        if (remainingIds.length === 0) {\n          document.body.removeChild(node.current);\n          node.current = null;\n        }\n      }\n    } catch {\n      node.current = null;\n    }\n  });\n\n  if (node.current) {\n    if (!hasChildren && !target && placement !== 'center') {\n      return null;\n    }\n\n    return createPortal(children, node.current);\n  }\n\n  return null;\n}\n","import {\n  Children,\n  cloneElement,\n  CSSProperties,\n  Fragment,\n  isValidElement,\n  ReactElement,\n  ReactNode,\n  RefObject,\n} from 'react';\nimport { PlainObject } from '@gilbarbara/types';\nimport is from 'is-lite';\n\nimport { STATUS } from '../literals';\nimport { useMount } from '../modules/hooks';\nimport { CloseFunction, Statuses } from '../types';\n\ninterface Props {\n  childRef: RefObject<HTMLElement | null>;\n  children: ReactNode;\n  id: string;\n  isControlled: boolean;\n  onClick: CloseFunction<HTMLSpanElement>;\n  onMount: () => void;\n  onMouseEnter: CloseFunction<HTMLSpanElement>;\n  onMouseLeave: CloseFunction<HTMLSpanElement>;\n  status: Statuses;\n  style?: CSSProperties;\n  styles: CSSProperties;\n  wrapperRef: RefObject<HTMLElement | null>;\n}\n\nexport default function FloaterWrapper(props: Props) {\n  const {\n    childRef,\n    children,\n    id,\n    isControlled,\n    onClick,\n    onMount,\n    onMouseEnter,\n    onMouseLeave,\n    status,\n    style,\n    styles,\n    wrapperRef,\n  } = props;\n\n  useMount(() => {\n    onMount();\n  });\n\n  let element: ReactElement | null = null;\n\n  const mergedStyles = {\n    ...styles,\n    ...style,\n    ...(isValidElement(children)\n      ? (children as ReactElement<{ style?: CSSProperties }>).props.style\n      : undefined),\n  };\n\n  const wrapperId = `${id}-wrapper`;\n  let wrapperProps: PlainObject = {\n    'aria-describedby': ([STATUS.OPENING, STATUS.OPEN, STATUS.CLOSING] as Statuses[]).includes(\n      status,\n    )\n      ? id\n      : undefined,\n    style: mergedStyles,\n  };\n\n  if (!isControlled) {\n    wrapperProps = {\n      ...wrapperProps,\n      onClick,\n      onMouseEnter,\n      onMouseLeave,\n    };\n  }\n\n  if (children) {\n    if (Children.count(children) === 1 && isValidElement(children) && children.type !== Fragment) {\n      element = is.function(children.type) ? (\n        <span ref={wrapperRef} id={wrapperId} {...wrapperProps}>\n          {cloneElement(Children.only(children) as ReactElement<PlainObject>, {\n            innerRef: childRef,\n          })}\n        </span>\n      ) : (\n        cloneElement(Children.only(children) as ReactElement<PlainObject>, {\n          id: wrapperId,\n          ref: wrapperRef,\n          ...wrapperProps,\n        })\n      );\n    } else {\n      element = (\n        <span ref={wrapperRef} id={wrapperId} {...wrapperProps}>\n          {children}\n        </span>\n      );\n    }\n  }\n\n  return element;\n}\n","import { deepmerge } from 'deepmerge-ts';\n\nimport { PartialDeep, Styles } from '../types';\n\nconst defaultOptions = {\n  zIndex: 100,\n};\n\nexport default function getStyles(styles?: PartialDeep<Styles>): Styles {\n  const { options = {}, ...rest } = styles ?? {};\n\n  return deepmerge(\n    {\n      arrow: {\n        base: 32,\n        color: '#fff',\n        display: 'inline-flex',\n        position: 'absolute',\n        size: 16,\n      },\n      close: {\n        backgroundColor: 'transparent',\n        border: 0,\n        borderRadius: 0,\n        color: '#555',\n        fontSize: 0,\n        height: 15,\n        outline: 'none',\n        padding: 10,\n        position: 'absolute',\n        right: 0,\n        top: 0,\n        width: 15,\n        WebkitAppearance: 'none',\n      },\n      container: {\n        backgroundColor: '#fff',\n        color: '#666',\n        minHeight: 60,\n        minWidth: 200,\n        padding: 20,\n        position: 'relative',\n        zIndex: 10,\n      },\n      content: {\n        fontSize: 15,\n      },\n      footer: {\n        borderTop: '1px solid #ccc',\n        fontSize: 13,\n        marginTop: 10,\n        paddingTop: 5,\n      },\n      floater: {\n        display: 'inline-block',\n        filter: 'drop-shadow(0 0 3px rgba(0, 0, 0, 0.3))',\n        maxWidth: 300,\n        opacity: 0,\n        position: 'relative',\n        transition: 'opacity 0.3s',\n        visibility: 'hidden',\n        zIndex: options.zIndex,\n      },\n      floaterCentered: {\n        left: '50%',\n        position: 'fixed',\n        top: '50%',\n        transform: 'translate(-50%, -50%)',\n      },\n      floaterClosing: {\n        opacity: 0,\n        visibility: 'visible',\n      },\n      floaterOpening: {\n        opacity: 1,\n        visibility: 'visible',\n      },\n      floaterWithComponent: {\n        maxWidth: '100%',\n      },\n      title: {\n        borderBottom: '1px solid #555',\n        color: '#555',\n        fontSize: 18,\n        marginBottom: 5,\n        paddingBottom: 6,\n        paddingRight: 18,\n      },\n      wrapper: {\n        cursor: 'help',\n        zIndex: options.zIndex,\n      },\n      wrapperPosition: {\n        left: -1000,\n        position: 'absolute',\n        top: -1000,\n        visibility: 'hidden',\n      },\n      options: deepmerge(defaultOptions, options),\n    },\n    rest,\n  ) as Styles;\n}\n","import { CSSProperties, useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\nimport { PlainObject } from '@gilbarbara/types';\nimport { createPopper, Instance, ModifierArguments } from '@popperjs/core';\nimport is from 'is-lite';\n\nimport { POSITIONING_PROPS, STATUS } from '../literals';\nimport { Props, State, Statuses, Styles } from '../types';\n\nimport {\n  enhanceProps,\n  getFallbackPlacements,\n  getModifiers,\n  isFixed,\n  isMobile,\n  log,\n  mergeModifier,\n  once,\n  randomId,\n} from './helpers';\nimport { useUpdateEffect } from './hooks';\nimport getStyles from './styles';\n\nexport function useFloater(props: Props) {\n  const {\n    arrow: arrowElement,\n    autoOpen = false,\n    callback,\n    children,\n    component,\n    content,\n    debug = false,\n    disableFlip = false,\n    disableHoverToClick = false,\n    event = 'click',\n    eventDelay = 0.4,\n    footer,\n    getPopper,\n    hideArrow = false,\n    id,\n    modifiers,\n    offset = 15,\n    open,\n    placement = 'bottom',\n    portalElement,\n    showCloseButton = false,\n    style,\n    styles,\n    target,\n    title,\n    wrapperOptions,\n  } = enhanceProps(props);\n\n  const [state, setState] = useReducer(\n    (previousState: State, nextState: Partial<State>) => ({\n      ...previousState,\n      ...nextState,\n    }),\n    {\n      currentPlacement: placement,\n      positionWrapper: !!wrapperOptions?.position && !!target,\n      status: STATUS.INIT,\n      statusWrapper: STATUS.INIT,\n    },\n  );\n\n  const { currentPlacement, positionWrapper, status, statusWrapper } = state;\n\n  // ------------------\n  // Refs\n  // ------------------\n\n  // DOM\n  const arrowRef = useRef<HTMLSpanElement>(null);\n  const childRef = useRef<HTMLElement>(null);\n  const floaterRef = useRef<HTMLDivElement>(null);\n  const wrapperRef = useRef<HTMLSpanElement>(null);\n\n  // Internal\n  const eventDelayTimer = useRef<number>(undefined);\n  const internalId = useRef(randomId());\n  const isMounted = useRef(false);\n  const popperGeneration = useRef(0);\n  const popperRef = useRef<Instance>(undefined);\n  const previousStatus = useRef<Statuses>(STATUS.INIT);\n  const stateRef = useRef<State>(state);\n  const removeTransitionListener = useRef<(() => void) | undefined>(undefined);\n  const wrapperPopperRef = useRef<Instance>(undefined);\n  const wrapperStyles = useRef<CSSProperties>(undefined);\n\n  // Callback refs (updated each render to keep closures fresh)\n  const callbackRef = useRef(callback);\n  const getPopperRef = useRef(getPopper);\n  const initPopperRef = useRef<() => void>(undefined!);\n  const propsRef = useRef(props);\n  const targetElement = useRef<() => HTMLElement | null>(undefined!);\n\n  // ------------------\n  // Ref updates\n  // ------------------\n\n  callbackRef.current = callback;\n  getPopperRef.current = getPopper;\n  propsRef.current = props;\n\n  targetElement.current = () => {\n    if (target) {\n      if (is.domElement(target)) {\n        return target;\n      }\n\n      return document.querySelector(target) as HTMLElement;\n    }\n\n    return childRef.current ?? wrapperRef.current;\n  };\n\n  // ------------------\n  // Derived values\n  // ------------------\n\n  const currentDebug = debug || !!window.ReactFloaterDebug;\n  const isIdle = status === STATUS.IDLE;\n\n  const currentEvent = useMemo(() => {\n    if (event === 'hover' && isMobile() && !disableHoverToClick) {\n      return 'click';\n    }\n\n    return event;\n  }, [disableHoverToClick, event]);\n\n  const currentStyles = useMemo(() => {\n    const nextStyles: Styles = getStyles(styles);\n    const element = targetElement.current();\n\n    if (positionWrapper) {\n      let wrapperCurrentStyles: CSSProperties | undefined;\n\n      if (!isIdle) {\n        wrapperCurrentStyles = nextStyles.wrapperPosition;\n      } else if (statusWrapper === STATUS.RENDER) {\n        wrapperCurrentStyles = wrapperPopperRef.current?.state.styles;\n      }\n\n      nextStyles.wrapper = {\n        ...nextStyles.wrapper,\n        ...wrapperCurrentStyles,\n      };\n    }\n\n    if (element) {\n      const targetStyles = window.getComputedStyle(element);\n\n      if (wrapperStyles.current) {\n        nextStyles.wrapper = {\n          ...nextStyles.wrapper,\n          ...wrapperStyles.current,\n        };\n      } else if (!['relative', 'static'].includes(targetStyles.position)) {\n        wrapperStyles.current = {};\n\n        if (!positionWrapper) {\n          POSITIONING_PROPS.forEach(d => {\n            if (d === 'position') {\n              wrapperStyles.current![d] = targetStyles[d] as CSSProperties['position'];\n            } else {\n              wrapperStyles.current![d] = targetStyles[d];\n            }\n          });\n\n          nextStyles.wrapper = {\n            ...nextStyles.wrapper,\n            ...wrapperStyles.current,\n          };\n        }\n      }\n    }\n\n    return nextStyles;\n  }, [positionWrapper, isIdle, statusWrapper, styles]);\n\n  // ------------------\n  // Core functions\n  // ------------------\n\n  const updateState = useCallback((nextState: Partial<State>, callback_?: () => void) => {\n    if (isMounted.current) {\n      setState(nextState);\n      stateRef.current = { ...stateRef.current, ...nextState };\n\n      if (callback_) {\n        callback_();\n      }\n    }\n  }, []);\n\n  const toggle = useCallback(\n    (forceStatus?: Statuses) => {\n      let nextStatus: Statuses =\n        stateRef.current.status === STATUS.OPEN ? STATUS.CLOSING : STATUS.RENDER;\n\n      if (!is.undefined(forceStatus)) {\n        nextStatus = forceStatus;\n      }\n\n      updateState({\n        status: nextStatus,\n        statusWrapper: nextStatus === STATUS.CLOSING ? STATUS.RENDER : STATUS.IDLE,\n      });\n    },\n    [updateState],\n  );\n\n  const initPopper = useCallback(() => {\n    const nextStatus = stateRef.current.status === STATUS.RENDER ? STATUS.OPENING : STATUS.IDLE;\n\n    popperGeneration.current++;\n    const generation = popperGeneration.current;\n    const element = targetElement.current();\n\n    if (placement === 'center') {\n      requestAnimationFrame(() => {\n        if (popperGeneration.current !== generation) return;\n\n        updateState({ status: nextStatus });\n      });\n    } else if (element) {\n      if (floaterRef.current) {\n        const { arrow, flip, offset: offsetModifier, ...rest } = getModifiers(modifiers);\n\n        popperRef.current = createPopper(element, floaterRef.current, {\n          placement,\n          strategy: isFixed(targetElement.current()) ? 'fixed' : 'absolute',\n          modifiers: [\n            mergeModifier(\n              {\n                name: 'arrow',\n                enabled: !hideArrow,\n                options: {\n                  element: arrowRef.current,\n                  padding: 8,\n                },\n              },\n              arrow,\n            ),\n            mergeModifier(\n              {\n                name: 'flip',\n                enabled: !disableFlip,\n                options: {\n                  altAxis: false,\n                  fallbackPlacements: getFallbackPlacements(placement || 'bottom'),\n                },\n              },\n              flip,\n            ),\n            mergeModifier(\n              {\n                name: 'offset',\n                enabled: true,\n                options: {\n                  offset: [0, offset],\n                },\n              },\n              offsetModifier,\n            ),\n            {\n              name: 'updatePlacement',\n              enabled: true,\n              phase: 'afterWrite',\n              /* v8 ignore start -- @preserve */\n              fn: ({ instance, state: popperState }: ModifierArguments<PlainObject>) => {\n                if (popperState.placement !== stateRef.current.currentPlacement) {\n                  popperRef.current = instance;\n                  updateState({ currentPlacement: popperState.placement });\n                }\n              },\n              /* v8 ignore stop -- @preserve */\n            },\n            {\n              name: 'applyArrowStyle',\n              enabled: true,\n              phase: 'write',\n              /* v8 ignore start -- @preserve */\n              fn: ({ state: popperState }: ModifierArguments<PlainObject>) => {\n                const {\n                  elements: { arrow: stateArrow },\n                  placement: statePlacement,\n                } = popperState;\n\n                if (stateArrow) {\n                  if (statePlacement.startsWith('top')) {\n                    stateArrow.style.bottom = '0px';\n                    stateArrow.style.right = '';\n                  } else if (statePlacement.startsWith('bottom')) {\n                    stateArrow.style.top = '0px';\n                    stateArrow.style.right = '';\n                  } else if (statePlacement.startsWith('left')) {\n                    stateArrow.style.right = '0px';\n                    stateArrow.style.bottom = '';\n                  } else if (statePlacement.startsWith('right')) {\n                    stateArrow.style.left = '0px';\n                    stateArrow.style.bottom = '';\n                  }\n                }\n              },\n              /* v8 ignore stop -- @preserve */\n            },\n            ...Object.values(rest),\n          ],\n          /* v8 ignore start -- @preserve */\n          onFirstUpdate: popperState => {\n            if (popperGeneration.current !== generation) return;\n\n            updateState({\n              currentPlacement: popperState.placement,\n              status: nextStatus,\n            });\n\n            if (placement !== popperState.placement) {\n              setTimeout(() => {\n                popperRef.current?.forceUpdate();\n              });\n            }\n          },\n          /* v8 ignore stop -- @preserve */\n        });\n\n        if (getPopperRef.current && popperRef.current) {\n          getPopperRef.current(popperRef.current, 'floater');\n        }\n      } else if (stateRef.current.status === STATUS.RENDER) {\n        /* v8 ignore start -- @preserve */\n        requestAnimationFrame(() => {\n          if (isMounted.current && stateRef.current.status === STATUS.RENDER) {\n            initPopper();\n          }\n        });\n        /* v8 ignore stop -- @preserve */\n      } else {\n        /* v8 ignore next 3 -- @preserve */\n        updateState({\n          status: STATUS.IDLE,\n        });\n      }\n\n      /* v8 ignore start -- @preserve */\n      if (wrapperRef.current && !wrapperPopperRef.current && stateRef.current.positionWrapper) {\n        const wrapperOffset = wrapperOptions?.offset ?? 0;\n\n        wrapperPopperRef.current = createPopper(element, wrapperRef.current, {\n          placement: wrapperOptions?.placement ?? placement,\n          strategy: isFixed(targetElement.current()) ? 'fixed' : 'absolute',\n          modifiers: [\n            {\n              name: 'arrow',\n              enabled: false,\n            },\n            {\n              name: 'offset',\n              options: {\n                offset: [0, wrapperOffset],\n              },\n            },\n            {\n              name: 'flip',\n              enabled: false,\n            },\n          ],\n          onFirstUpdate: popperState => {\n            updateState({ statusWrapper: STATUS.RENDER });\n\n            if (placement !== popperState.placement) {\n              setTimeout(() => {\n                wrapperPopperRef.current?.forceUpdate();\n              });\n            }\n          },\n        });\n\n        if (getPopperRef.current) {\n          getPopperRef.current(wrapperPopperRef.current, 'wrapper');\n        }\n      }\n      /* v8 ignore stop -- @preserve */\n    }\n  }, [\n    disableFlip,\n    hideArrow,\n    modifiers,\n    offset,\n    placement,\n    updateState,\n    wrapperOptions?.offset,\n    wrapperOptions?.placement,\n  ]);\n\n  const cleanUp = useCallback(() => {\n    if (popperRef.current) {\n      popperRef.current.destroy();\n      popperRef.current = undefined;\n    }\n\n    if (wrapperPopperRef.current) {\n      wrapperPopperRef.current.destroy();\n      wrapperPopperRef.current = undefined;\n    }\n  }, []);\n\n  initPopperRef.current = initPopper;\n\n  // ------------------\n  // Event handlers\n  // ------------------\n\n  const handleTransitionEnd = useCallback(() => {\n    /* v8 ignore next 3 -- @preserve */\n    if (wrapperPopperRef.current) {\n      wrapperPopperRef.current.forceUpdate();\n    }\n\n    updateState(\n      {\n        status: stateRef.current.status === STATUS.OPENING ? STATUS.OPEN : STATUS.IDLE,\n      },\n      () => {\n        if (callbackRef.current) {\n          callbackRef.current(\n            stateRef.current.status === STATUS.OPEN ? 'open' : 'close',\n            enhanceProps(propsRef.current),\n          );\n        }\n      },\n    );\n  }, [updateState]);\n\n  const handleClick = useCallback(() => {\n    if (is.boolean(open)) {\n      return;\n    }\n\n    if (currentEvent === 'click' || (currentEvent === 'hover' && positionWrapper)) {\n      log({\n        title: 'click',\n        data: [{ event, status: status === STATUS.OPEN ? 'closing' : 'opening' }],\n        debug: currentDebug,\n      });\n\n      toggle(status === STATUS.IDLE ? STATUS.RENDER : undefined);\n    }\n  }, [currentDebug, currentEvent, event, open, positionWrapper, status, toggle]);\n\n  const handleMouseEnter = useCallback(() => {\n    if (is.boolean(open) || isMobile() || currentEvent !== 'hover') {\n      return;\n    }\n\n    log({\n      title: 'mouseEnter',\n      data: [{ key: 'originalEvent', value: event }],\n      debug: currentDebug,\n    });\n\n    if (status === STATUS.IDLE) {\n      clearTimeout(eventDelayTimer.current);\n      eventDelayTimer.current = undefined;\n      toggle(STATUS.RENDER);\n    }\n  }, [currentDebug, currentEvent, event, open, status, toggle]);\n\n  const handleMouseLeave = useCallback(() => {\n    if (is.boolean(open) || isMobile()) {\n      return;\n    }\n\n    if (currentEvent === 'hover') {\n      log({\n        title: 'mouseLeave',\n        data: [{ key: 'originalEvent', value: event }],\n        debug: currentDebug,\n      });\n\n      const hasOpenStatus = ([STATUS.OPENING, STATUS.OPEN] as Statuses[]).includes(status);\n\n      if (!eventDelay) {\n        toggle(status === STATUS.CLOSING ? STATUS.IDLE : STATUS.CLOSING);\n      } else if (!positionWrapper) {\n        if (hasOpenStatus) {\n          clearTimeout(eventDelayTimer.current);\n          eventDelayTimer.current = window.setTimeout(() => {\n            toggle();\n            eventDelayTimer.current = undefined;\n          }, eventDelay * 1000);\n        }\n      }\n    }\n  }, [currentDebug, currentEvent, event, eventDelay, open, positionWrapper, status, toggle]);\n\n  const handleWrapperMount = useCallback(() => {\n    if (positionWrapper) {\n      initPopper();\n    }\n  }, [initPopper, positionWrapper]);\n\n  // ------------------\n  // Effects\n  // ------------------\n\n  // Mount\n  useEffect(() => {\n    isMounted.current = true;\n    initPopperRef.current();\n  }, []);\n\n  // Debug log\n  useEffect(() => {\n    log({\n      title: 'init',\n      data: {\n        hasChildren: !!children,\n        hasTarget: !!target,\n        isControlled: is.boolean(open),\n        positionWrapper,\n        target: targetElement.current(),\n        floater: floaterRef.current,\n      },\n      debug: currentDebug,\n    });\n  }, [children, target, open, positionWrapper, currentDebug]);\n\n  // Unmount\n  useEffect(() => {\n    return () => {\n      isMounted.current = false;\n      clearTimeout(eventDelayTimer.current);\n      removeTransitionListener.current?.();\n      cleanUp();\n    };\n  }, [cleanUp]);\n\n  // Controlled mode: respond to `open` prop changes (skips first render)\n  useUpdateEffect(() => {\n    if (is.boolean(open)) {\n      const forceStatus = open ? STATUS.RENDER : STATUS.CLOSING;\n\n      toggle(forceStatus);\n    }\n  }, [open, toggle]);\n\n  // Sync positionWrapper when wrapperOptions.position or target changes\n  useEffect(() => {\n    const next = !!wrapperOptions?.position && !!target;\n\n    if (stateRef.current.positionWrapper !== next) {\n      updateState({ positionWrapper: next });\n    }\n  }, [wrapperOptions?.position, target, updateState]);\n\n  // Status transitions\n  useEffect(() => {\n    if (status === previousStatus.current) {\n      return;\n    }\n\n    if (status === STATUS.IDLE && previousStatus.current !== STATUS.IDLE) {\n      if (open || (previousStatus.current === STATUS.INIT && autoOpen)) {\n        toggle(STATUS.RENDER);\n      }\n    }\n\n    if (status === STATUS.RENDER && previousStatus.current !== STATUS.RENDER) {\n      if (popperRef.current) {\n        popperRef.current.destroy();\n      }\n\n      initPopper();\n    }\n\n    if (\n      floaterRef.current &&\n      (status === STATUS.RENDER || status === STATUS.CLOSING) &&\n      previousStatus.current !== status\n    ) {\n      removeTransitionListener.current?.();\n      removeTransitionListener.current = once(\n        floaterRef.current,\n        'transitionend',\n        handleTransitionEnd,\n      );\n    }\n\n    if (status === STATUS.IDLE && previousStatus.current === STATUS.CLOSING) {\n      if (popperRef.current) {\n        popperRef.current.destroy();\n        popperRef.current = undefined;\n      }\n\n      /* v8 ignore next 3 -- @preserve */\n      if (wrapperPopperRef.current) {\n        wrapperPopperRef.current.forceUpdate();\n      }\n    }\n\n    previousStatus.current = status;\n  }, [autoOpen, handleTransitionEnd, initPopper, open, status, toggle]);\n\n  return {\n    // Refs\n    arrowRef,\n    childRef,\n    floaterRef,\n    wrapperRef,\n\n    // State\n    currentPlacement,\n    positionWrapper,\n    status,\n\n    // Computed\n    currentStyles,\n    internalId: internalId.current,\n\n    // Enhanced props needed by JSX\n    arrowElement,\n    children,\n    component,\n    content,\n    footer,\n    hideArrow,\n    id,\n    open,\n    portalElement,\n    showCloseButton,\n    style,\n    target,\n    title,\n\n    // Handlers\n    handleClick,\n    handleMouseEnter,\n    handleMouseLeave,\n    handleWrapperMount,\n  };\n}\n","import is from 'is-lite';\n\nimport Floater from './components/Floater';\nimport Portal from './components/Portal';\nimport Wrapper from './components/Wrapper';\nimport { canUseDOM } from './modules/helpers';\nimport { useFloater } from './modules/useFloater';\nimport { Props } from './types';\n\nfunction FloaterComponent(props: Props) {\n  const {\n    arrowElement,\n    arrowRef,\n    childRef,\n    children,\n    component,\n    content,\n    currentPlacement,\n    currentStyles,\n    floaterRef,\n    footer,\n    handleClick,\n    handleMouseEnter,\n    handleMouseLeave,\n    handleWrapperMount,\n    hideArrow,\n    id,\n    internalId,\n    open,\n    portalElement,\n    positionWrapper,\n    showCloseButton,\n    status,\n    style,\n    target,\n    title,\n    wrapperRef,\n  } = useFloater(props);\n\n  const wrapper = (\n    <Wrapper\n      childRef={childRef}\n      id={id ?? internalId}\n      isControlled={is.boolean(open)}\n      onClick={handleClick}\n      onMount={handleWrapperMount}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      status={status}\n      style={style}\n      styles={currentStyles.wrapper}\n      wrapperRef={wrapperRef}\n    >\n      {children}\n    </Wrapper>\n  );\n\n  return (\n    <>\n      <Portal\n        hasChildren={!!children}\n        internalId={internalId}\n        placement={currentPlacement}\n        portalElement={portalElement}\n        target={target}\n        zIndex={currentStyles.options.zIndex}\n      >\n        <Floater\n          arrow={arrowElement}\n          arrowRef={arrowRef}\n          component={component}\n          content={content}\n          floaterRef={floaterRef}\n          footer={footer}\n          hideArrow={hideArrow || currentPlacement === 'center'}\n          id={id ?? internalId}\n          onClick={handleClick}\n          placement={currentPlacement}\n          positionWrapper={positionWrapper}\n          showCloseButton={showCloseButton}\n          status={status}\n          styles={currentStyles}\n          title={title}\n        />\n        {positionWrapper && wrapper}\n      </Portal>\n      {!positionWrapper && wrapper}\n    </>\n  );\n}\n\nexport default function ReactFloater(props: Props) {\n  if (!canUseDOM()) {\n    return null;\n  }\n\n  return <FloaterComponent {...props} />;\n}\n\nexport type {\n  Action,\n  CustomComponentProps,\n  Placement,\n  PopperInstance,\n  Props,\n  Styles,\n} from './types';\n"],"mappings":"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AO,CAAC;AAErE,QAAO;EAEL;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA,YAAY,WAAW;EAGvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACD;;;;ACznBH,SAAS,iBAAiB,OAAc;CACtC,MAAM,EACJ,cACA,UACA,UACA,UACA,WACA,SACA,kBACA,eACA,YACA,QACA,aACA,kBACA,kBACA,oBACA,WACA,IACA,YACA,MACA,eACA,iBACA,iBACA,QACA,OACA,QACA,OACA,eACE,WAAW,MAAM;CAErB,MAAM,UACJ,oBAACC,gBAAD;EACY;EACV,IAAI,MAAM;EACV,cAAc,GAAG,QAAQ,KAAK;EAC9B,SAAS;EACT,SAAS;EACT,cAAc;EACd,cAAc;EACN;EACD;EACP,QAAQ,cAAc;EACV;EAEX;EACO,CAAA;AAGZ,QACE,qBAAA,YAAA,EAAA,UAAA,CACE,qBAACC,oBAAD;EACE,aAAa,CAAC,CAAC;EACH;EACZ,WAAW;EACI;EACP;EACR,QAAQ,cAAc,QAAQ;YANhC,CAQE,oBAAC,SAAD;GACE,OAAO;GACG;GACC;GACF;GACG;GACJ;GACR,WAAW,aAAa,qBAAqB;GAC7C,IAAI,MAAM;GACV,SAAS;GACT,WAAW;GACM;GACA;GACT;GACR,QAAQ;GACD;GACP,CAAA,EACD,mBAAmB,QACb;KACR,CAAC,mBAAmB,QACpB,EAAA,CAAA;;AAIP,SAAwB,aAAa,OAAc;AACjD,KAAI,CAAC,WAAW,CACd,QAAO;AAGT,QAAO,oBAAC,kBAAD,EAAkB,GAAI,OAAS,CAAA"}