react-floater
Version:
Floaters everywhere!
1 lines • 59.5 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","names":["is","CloseButton","Container","Arrow","is","is","Children","Fragment","is","is","Wrapper","is","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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"}