UNPKG

react-floater

Version:
1 lines 58.3 kB
{"version":3,"sources":["../src/index.tsx","../src/components/Floater/index.tsx","../src/components/Floater/Arrow.tsx","../src/components/Floater/Container.tsx","../src/components/Floater/CloseButton.tsx","../src/literals.ts","../src/modules/helpers.ts","../src/components/Portal.tsx","../src/modules/hooks.ts","../src/components/Wrapper.tsx","../src/modules/styles.ts"],"sourcesContent":["import * as React from 'react';\nimport { PlainObject } from '@gilbarbara/types';\nimport { createPopper, Instance, ModifierArguments } from '@popperjs/core';\nimport is from 'is-lite';\nimport useTreeChanges from 'tree-changes-hook';\n\nimport Floater from './components/Floater';\nimport Portal from './components/Portal';\nimport Wrapper from './components/Wrapper';\nimport { POSITIONING_PROPS, STATUS } from './literals';\nimport {\n  canUseDOM,\n  enhanceProps,\n  getFallbackPlacements,\n  getModifiers,\n  isFixed,\n  isMobile,\n  log,\n  mergeModifier,\n  once,\n  randomId,\n} from './modules/helpers';\nimport { useMount, useSingleton, useUnmount, useUpdateEffect } from './modules/hooks';\nimport getStyles from './modules/styles';\nimport { Props, State, Statuses, Styles } from './types';\n\nexport default function ReactFloater(props: Props) {\n  const {\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] = React.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 arrowRef = React.useRef<HTMLSpanElement>(null);\n  const childRef = React.useRef<HTMLElement>(null);\n  const eventDelayTimer = React.useRef<number>();\n  const floaterRef = React.useRef<HTMLDivElement>(null);\n  const internalId = React.useRef(randomId());\n  const isMounted = React.useRef(false);\n  const popperRef = React.useRef<Instance>();\n  const stateRef = React.useRef<State>(state);\n  const wrapperPopper = React.useRef<Instance>();\n  const wrapperRef = React.useRef<HTMLSpanElement>(null);\n  const wrapperStyles = React.useRef<React.CSSProperties>({});\n\n  const { currentPlacement, positionWrapper, status, statusWrapper } = state;\n\n  const { changed } = useTreeChanges(state);\n  const { changed: changedProps } = useTreeChanges(props);\n\n  const updateState = React.useCallback(\n    (nextState: Partial<State>, callback_?: () => void) => {\n      if (isMounted.current) {\n        setState(nextState);\n        stateRef.current = { ...state, ...nextState };\n\n        if (callback_) {\n          callback_();\n        }\n      }\n    },\n    [setState, state],\n  );\n\n  const toggle = React.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 targetElement = React.useRef(() => {\n    if (!canUseDOM()) {\n      return null;\n    }\n\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  const currentDebug = React.useMemo(() => {\n    return canUseDOM() && (debug || !!window.ReactFloaterDebug);\n  }, [debug]);\n\n  const currentEvent = React.useMemo(() => {\n    if (event === 'hover' && isMobile() && !disableHoverToClick) {\n      return 'click';\n    }\n\n    return event;\n  }, [disableHoverToClick, event]);\n\n  const currentStyles = React.useMemo(() => {\n    const nextStyles: Styles = getStyles(styles);\n    const element = targetElement.current();\n\n    if (positionWrapper) {\n      let wrapperCurrentStyles: React.CSSProperties | undefined;\n\n      if (status !== STATUS.IDLE) {\n        wrapperCurrentStyles = nextStyles.wrapperPosition;\n      } else if (statusWrapper === STATUS.RENDER) {\n        wrapperCurrentStyles = wrapperPopper.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            // eslint-disable-next-line unicorn/prefer-ternary\n            if (d === 'position') {\n              wrapperStyles.current[d] = targetStyles[d] as React.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, status, statusWrapper, styles]);\n\n  const initPopper = React.useRef(() => {\n    const nextStatus = stateRef.current.status === STATUS.RENDER ? STATUS.OPENING : STATUS.IDLE;\n    const element = targetElement.current();\n\n    if (placement === 'center') {\n      setTimeout(() => {\n        updateState({ status: nextStatus });\n      }, 100);\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              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            },\n            {\n              name: 'applyArrowStyle',\n              enabled: true,\n              phase: 'write',\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            },\n            ...Object.values(rest),\n          ],\n          onFirstUpdate: popperState => {\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        });\n\n        if (getPopper && popperRef.current) {\n          getPopper(popperRef.current, 'floater');\n        }\n      } else {\n        updateState({\n          status: STATUS.IDLE,\n        });\n      }\n\n      if (wrapperRef.current && !wrapperPopper.current && stateRef.current.positionWrapper) {\n        const wrapperOffset = wrapperOptions?.offset ? wrapperOptions.offset : 0;\n\n        wrapperPopper.current = createPopper(element, wrapperRef.current, {\n          placement: wrapperOptions?.placement ?? placement,\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                wrapperPopper.current?.forceUpdate();\n              });\n            }\n          },\n        });\n\n        if (getPopper) {\n          getPopper(wrapperPopper.current, 'wrapper');\n        }\n      }\n    }\n  });\n\n  const handleLoad = React.useRef(() => {\n    if (popperRef.current) {\n      popperRef.current.forceUpdate();\n    }\n\n    if (wrapperPopper.current) {\n      wrapperPopper.current.forceUpdate();\n    }\n  });\n\n  const handleTransitionEnd = React.useRef(() => {\n    if (wrapperPopper.current) {\n      wrapperPopper.current.forceUpdate();\n    }\n\n    updateState(\n      {\n        status: stateRef.current.status === STATUS.OPENING ? STATUS.OPEN : STATUS.IDLE,\n      },\n      () => {\n        if (callback) {\n          callback(stateRef.current.status === STATUS.OPEN ? 'open' : 'close', enhanceProps(props));\n        }\n      },\n    );\n  });\n\n  const handleClick = React.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 === 'idle' ? STATUS.RENDER : undefined);\n    }\n  }, [currentDebug, currentEvent, event, open, positionWrapper, status, toggle]);\n\n  const handleMouseEnter = React.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 = React.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 = React.useCallback(() => {\n    if (positionWrapper) {\n      initPopper.current();\n    }\n  }, [positionWrapper]);\n\n  const cleanUp = () => {\n    if (popperRef.current) {\n      popperRef.current.destroy();\n      popperRef.current = undefined;\n    }\n\n    if (wrapperPopper.current) {\n      wrapperPopper.current.destroy();\n      wrapperPopper.current = undefined;\n    }\n  };\n\n  useSingleton(() => {\n    if (canUseDOM()) {\n      window.addEventListener('load', handleLoad.current);\n    }\n  });\n\n  useMount(() => {\n    isMounted.current = true;\n\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\n    initPopper.current();\n  });\n\n  useUnmount(() => {\n    isMounted.current = false;\n\n    cleanUp();\n    window.removeEventListener('load', handleLoad.current);\n  });\n\n  // handle changes\n  useUpdateEffect(() => {\n    if (!canUseDOM()) {\n      return;\n    }\n\n    if (changedProps('open')) {\n      let forceStatus;\n\n      // always follow `open` in controlled mode\n      if (is.boolean(open)) {\n        forceStatus = open ? STATUS.RENDER : STATUS.CLOSING;\n      }\n\n      toggle(forceStatus);\n    }\n\n    if (changedProps('wrapperOptions.position') || changedProps('target')) {\n      updateState({\n        positionWrapper: !!wrapperOptions?.position && !!target,\n      });\n    }\n\n    if (\n      (changed('status', STATUS.IDLE) && open) ||\n      (changed('status', STATUS.IDLE, STATUS.INIT) && autoOpen)\n    ) {\n      toggle(STATUS.RENDER);\n    }\n\n    if (changed('status', STATUS.RENDER)) {\n      if (popperRef.current) {\n        popperRef.current.destroy();\n      }\n\n      initPopper.current();\n    }\n\n    if (floaterRef.current && changed('status', [STATUS.RENDER, STATUS.CLOSING])) {\n      once(floaterRef.current, 'transitionend', handleTransitionEnd.current);\n    }\n\n    if (changed('status', STATUS.IDLE, STATUS.CLOSING) && popperRef.current) {\n      popperRef.current.destroy();\n      popperRef.current = undefined;\n\n      if (wrapperPopper.current) {\n        wrapperPopper.current.forceUpdate();\n      }\n    }\n  });\n\n  const wrapper = (\n    <Wrapper\n      childRef={childRef}\n      id={id ?? internalId.current}\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.current}\n        placement={currentPlacement}\n        portalElement={portalElement}\n        target={target}\n        zIndex={currentStyles.options.zIndex}\n      >\n        <Floater\n          arrowRef={arrowRef}\n          component={component}\n          content={content}\n          floaterRef={floaterRef}\n          footer={footer}\n          hideArrow={hideArrow || currentPlacement === 'center'}\n          id={id ?? internalId.current}\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 type {\n  Action,\n  CustomComponentProps,\n  Placement,\n  PopperInstance,\n  Props,\n  Styles,\n} from './types';\n","import * as React from 'react';\nimport { PlainObject } from '@gilbarbara/types';\n\nimport Arrow from './Arrow';\nimport Container from './Container';\n\nimport { STATUS } from '../../literals';\nimport { isValidElement } from '../../modules/helpers';\nimport { CloseFunction, FloaterComponent, Statuses, Styles } from '../../types';\n\ninterface Props {\n  arrowRef: React.Ref<HTMLSpanElement>;\n  component?: FloaterComponent;\n  content?: React.ReactNode;\n  floaterRef: React.Ref<HTMLDivElement>;\n  footer?: React.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?: React.ReactNode;\n}\n\nfunction 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 = React.useMemo(() => {\n    const {\n      arrow: { length },\n      floater,\n      floaterCentered,\n      floaterClosing,\n      floaterOpening,\n      floaterWithComponent,\n    } = styles;\n    let element: React.CSSProperties = { ...floater };\n\n    if (!hideArrow) {\n      if (placement.startsWith('top')) {\n        element.padding = `0 0 ${length}px`;\n      } else if (placement.startsWith('bottom')) {\n        element.padding = `${length}px 0 0`;\n      } else if (placement.startsWith('left')) {\n        element.padding = `0 ${length}px 0 0`;\n      } else if (placement.startsWith('right')) {\n        element.padding = `0 0 0 ${length}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 = ['render', 'open', 'opening', 'closing'].includes(status);\n\n  const output: PlainObject<React.ReactNode> = {};\n  const classes = ['__floater'];\n  const baseProps = { id, role: 'tooltip' };\n\n  if (component) {\n    const componentProps = { closeFn, ...baseProps };\n\n    output.content = isValidElement(component)\n      ? React.cloneElement(component, componentProps)\n      : component(componentProps);\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} 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\nexport default React.memo(Floater);\n","import * as React from 'react';\n\nimport { Styles } from '../../types';\n\ninterface Props {\n  arrowRef: React.Ref<HTMLSpanElement>;\n  placement: string;\n  styles: Styles;\n}\n\nexport default function FloaterArrow(props: Props) {\n  const { arrowRef, placement, styles } = props;\n\n  const {\n    arrow: { color, display, length, position, spread },\n  } = styles;\n  const arrowStyles: React.CSSProperties = { display, position };\n\n  let points;\n  let x = spread;\n  let y = length;\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 = spread;\n    x = length;\n    points = `0,0 ${x},${y / 2} 0,${y}`;\n  } else if (placement.startsWith('right')) {\n    y = spread;\n    x = length;\n    points = `${x},${y} ${x},0 0,${y / 2}`;\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 * as React from 'react';\nimport is from 'is-lite';\n\nimport CloseButton from './CloseButton';\n\nimport { CloseFunction, Styles } from '../../types';\n\ninterface Props {\n  content: React.ReactNode;\n  footer?: React.ReactNode;\n  onClick: CloseFunction<HTMLButtonElement>;\n  open?: boolean;\n  positionWrapper: boolean;\n  showCloseButton?: boolean;\n  styles: Styles;\n  title?: React.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, React.ReactNode> = {\n    content: React.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 = React.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 = React.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 * as React from 'react';\n\nimport { CloseFunction } from '../../types';\n\ninterface Props {\n  onClick: CloseFunction<HTMLButtonElement>;\n  styles: React.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","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 * as React from 'react';\nimport { Modifier, Placement } from '@popperjs/core';\nimport { deepmerge } from 'deepmerge-ts';\nimport is from 'is-lite';\nimport { SetRequired } from 'type-fest';\n\nimport { LogOptions, PopperModifiers, Props } 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\nexport function isValidElement(object: unknown): object is React.ReactElement {\n  return React.isValidElement(object);\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\nexport function randomId(): string {\n  return `rf-${Math.round(Math.random() * 1e5)}`;\n}\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport is from 'is-lite';\n\nimport { canUseDOM, portalId } from '../modules/helpers';\nimport { useMount, useUnmount } from '../modules/hooks';\nimport { Placement, SelectorOrElement } from '../types';\n\ninterface Props {\n  children: React.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 = React.useRef<HTMLElement | null>(null);\n\n  const initialize = React.useCallback(() => {\n    if (!canUseDOM()) {\n      return;\n    }\n\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\n    if (!portalElement && !document.getElementById(portalId)) {\n      if (node.current) {\n        document.body.appendChild(node.current);\n      }\n    }\n  }, [internalId, portalElement, zIndex]);\n\n  useMount(() => {\n    if (!canUseDOM) {\n      return;\n    }\n\n    initialize();\n  });\n\n  React.useEffect(() => {\n    initialize();\n  }, [initialize]);\n\n  useUnmount(() => {\n    if (!canUseDOM() || !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        if (ids.includes(internalId)) {\n          node.current.dataset.ids = ids.filter(id => id !== internalId).join(',');\n        }\n\n        if (ids.length <= 1) {\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 { DependencyList, EffectCallback, useEffect, useRef } from 'react';\n\nfunction useEffectOnce(effect: EffectCallback) {\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  useEffect(effect, []);\n}\n\nexport function useMount(effect: EffectCallback) {\n  useEffectOnce(effect);\n}\n\nexport function useSingleton(callback: () => void): void {\n  const hasBeenCalled = useRef(false);\n\n  if (hasBeenCalled.current) {\n    return;\n  }\n\n  callback();\n  hasBeenCalled.current = true;\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      effect();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, deps);\n\n  if (isFirst.current) {\n    isFirst.current = false;\n  }\n}\n","import * as React 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: React.RefObject<HTMLElement>;\n  children: React.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?: React.CSSProperties;\n  styles: React.CSSProperties;\n  wrapperRef: React.RefObject<HTMLElement>;\n}\n\nfunction 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;\n\n  const mergedStyles = {\n    ...styles,\n    ...style,\n    ...(React.isValidElement(children) ? children.props.style : undefined),\n  };\n\n  let wrapperProps: PlainObject = {\n    'aria-describedby': ([STATUS.OPENING, STATUS.OPEN, STATUS.CLOSING] as Statuses[]).includes(\n      status,\n    )\n      ? id\n      : undefined,\n    'data-id': id,\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 (\n      React.Children.count(children) === 1 &&\n      React.isValidElement(children) &&\n      children.type !== React.Fragment\n    ) {\n      // eslint-disable-next-line unicorn/prefer-ternary\n      if (is.function(children.type)) {\n        element = (\n          <span ref={wrapperRef}>\n            {React.cloneElement(React.Children.only(children) as React.ReactElement, {\n              innerRef: childRef,\n              ...wrapperProps,\n            })}\n          </span>\n        );\n      } else {\n        element = React.cloneElement(React.Children.only(children) as React.ReactElement, {\n          ref: wrapperRef,\n          ...wrapperProps,\n        });\n      }\n    } else {\n      element = (\n        <span ref={wrapperRef} {...wrapperProps}>\n          {children}\n        </span>\n      );\n    }\n  }\n\n  return element ?? null;\n}\n\nexport default React.memo(FloaterWrapper);\n","import { deepmerge } from 'deepmerge-ts';\nimport { PartialDeep } from 'type-fest';\n\nimport { 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        color: '#fff',\n        display: 'inline-flex',\n        length: 16,\n        position: 'absolute',\n        spread: 32,\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"],"mappings":"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","names":["React","is","React","React","React","React","is","defaultOptions","isValidElement","isValidElement","React","is","is","React","is","is","deepmerge","is"]}