{"version":3,"file":"Floating.mjs","sources":["../../../src/components/Floating/Floating.tsx"],"sourcesContent":["'use client';\n\nimport type { Placement } from '@floating-ui/core';\nimport { autoUpdate, useFocus } from '@floating-ui/react';\nimport type { ComponentProps, FC, ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { useBaseFLoating, useFloatingInteractions } from '../../hooks/use-floating';\nimport { getArrowPlacement } from './helpers';\n\nexport interface FlowbiteFloatingTheme {\n  arrow: FlowbiteFloatingArrowTheme;\n  animation: string;\n  base: string;\n  content: string;\n  hidden: string;\n  style: {\n    auto: string;\n    dark: string;\n    light: string;\n  };\n  target: string;\n}\n\nexport interface FlowbiteFloatingArrowTheme {\n  base: string;\n  placement: string;\n  style: {\n    dark: string;\n    light: string;\n    auto: string;\n  };\n}\n\nexport type FloatingStyle = 'dark' | 'light' | 'auto';\n\nexport interface FloatingProps extends Omit<ComponentProps<'div'>, 'content' | 'style'> {\n  animation?: false | `duration-${number}`;\n  arrow?: boolean;\n  content: ReactNode;\n  placement?: 'auto' | Placement;\n  style?: FloatingStyle;\n  theme: FlowbiteFloatingTheme;\n  trigger?: 'hover' | 'click';\n  minWidth?: number;\n}\n\n/**\n * @see https://floating-ui.com/docs/react-dom-interactions\n */\nexport const Floating: FC<FloatingProps> = ({\n  animation = 'duration-300',\n  arrow = true,\n  children,\n  className,\n  content,\n  placement = 'top',\n  style = 'dark',\n  theme,\n  trigger = 'hover',\n  minWidth,\n  ...props\n}) => {\n  const arrowRef = useRef<HTMLDivElement>(null);\n  const [open, setOpen] = useState(false);\n\n  const floatingProperties = useBaseFLoating({\n    open,\n    placement,\n    arrowRef,\n    setOpen,\n  });\n\n  const {\n    context,\n    middlewareData: { arrow: { x: arrowX, y: arrowY } = {} },\n    refs,\n    strategy,\n    update,\n    x,\n    y,\n  } = floatingProperties;\n\n  const focus = useFocus(context);\n  const { getFloatingProps, getReferenceProps } = useFloatingInteractions({\n    context,\n    role: 'tooltip',\n    trigger,\n    interactions: [focus],\n  });\n\n  useEffect(() => {\n    if (refs.reference.current && refs.floating.current && open) {\n      return autoUpdate(refs.reference.current, refs.floating.current, update);\n    }\n  }, [open, refs.floating, refs.reference, update]);\n\n  return (\n    <>\n      <div\n        ref={refs.setReference}\n        className={theme.target}\n        data-testid=\"flowbite-tooltip-target\"\n        {...getReferenceProps()}\n      >\n        {children}\n      </div>\n      <div\n        ref={refs.setFloating}\n        data-testid=\"flowbite-tooltip\"\n        {...getFloatingProps({\n          className: twMerge(\n            theme.base,\n            animation && `${theme.animation} ${animation}`,\n            !open && theme.hidden,\n            theme.style[style],\n            className,\n          ),\n          style: {\n            position: strategy,\n            top: y ?? ' ',\n            left: x ?? ' ',\n            minWidth,\n          },\n          ...props,\n        })}\n      >\n        <div className={theme.content}>{content}</div>\n        {arrow && (\n          <div\n            className={twMerge(\n              theme.arrow.base,\n              style === 'dark' && theme.arrow.style.dark,\n              style === 'light' && theme.arrow.style.light,\n              style === 'auto' && theme.arrow.style.auto,\n            )}\n            data-testid=\"flowbite-tooltip-arrow\"\n            ref={arrowRef}\n            style={{\n              top: arrowY ?? ' ',\n              left: arrowX ?? ' ',\n              right: ' ',\n              bottom: ' ',\n              [getArrowPlacement({ placement: floatingProperties.placement })]: theme.arrow.placement,\n            }}\n          >\n            &nbsp;\n          </div>\n        )}\n      </div>\n    </>\n  );\n};\n"],"names":["Floating","animation","arrow","children","className","content","placement","style","theme","trigger","minWidth","props","arrowRef","useRef","open","setOpen","useState","floatingProperties","useBaseFLoating","context","middlewareData","x","arrowX","y","arrowY","refs","strategy","update","focus","useFocus","getFloatingProps","getReferenceProps","useFloatingInteractions","role","interactions","useEffect","reference","current","floating","autoUpdate","jsxs","Fragment","jsx","setReference","target","setFloating","twMerge","base","hidden","position","top","left","dark","light","auto","right","bottom","getArrowPlacement"],"mappings":";;;;;;AAkDO,MAAMA,IAA8BA,CAAC;AAAA,EAC1CC,WAAAA,IAAY;AAAA,EACZC,OAAAA,IAAQ;AAAA,EACRC,UAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,WAAAA,IAAY;AAAA,EACZC,OAAAA,IAAQ;AAAA,EACRC,OAAAA;AAAAA,EACAC,SAAAA,IAAU;AAAA,EACVC,UAAAA;AAAAA,EACA,GAAGC;AACL,MAAM;AACEC,QAAAA,IAAWC,EAAuB,IAAI,GACtC,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAEhCC,IAAqBC,EAAgB;AAAA,IACzCJ,MAAAA;AAAAA,IACAR,WAAAA;AAAAA,IACAM,UAAAA;AAAAA,IACAG,SAAAA;AAAAA,EAAAA,CACD,GAEK;AAAA,IACJI,SAAAA;AAAAA,IACAC,gBAAgB;AAAA,MAAElB,OAAO;AAAA,QAAEmB,GAAGC;AAAAA,QAAQC,GAAGC;AAAAA,MAAAA,IAAW,CAAC;AAAA,IAAE;AAAA,IACvDC,MAAAA;AAAAA,IACAC,UAAAA;AAAAA,IACAC,QAAAA;AAAAA,IACAN,GAAAA;AAAAA,IACAE,GAAAA;AAAAA,EACEN,IAAAA,GAEEW,IAAQC,EAASV,CAAO,GACxB;AAAA,IAAEW,kBAAAA;AAAAA,IAAkBC,mBAAAA;AAAAA,MAAsBC,EAAwB;AAAA,IACtEb,SAAAA;AAAAA,IACAc,MAAM;AAAA,IACNxB,SAAAA;AAAAA,IACAyB,cAAc,CAACN,CAAK;AAAA,EAAA,CACrB;AAEDO,SAAAA,EAAU,MAAM;AACd,QAAIV,EAAKW,UAAUC,WAAWZ,EAAKa,SAASD,WAAWvB;AACrD,aAAOyB,EAAWd,EAAKW,UAAUC,SAASZ,EAAKa,SAASD,SAASV,CAAM;AAAA,EACzE,GACC,CAACb,GAAMW,EAAKa,UAAUb,EAAKW,WAAWT,CAAM,CAAC,GAI5C,gBAAAa,EAAAC,GAAA,EAAA,UAAA;AAAA,IAAA,gBAAAC,EAAC,OACC,EAAA,KAAKjB,EAAKkB,cACV,WAAWnC,EAAMoC,QACjB,eAAY,2BACRb,GAAAA,EAAkB,GAErB5B,UAAAA,EACH,CAAA;AAAA,IACA,gBAAAqC,EAAC,SACC,KAAKf,EAAKoB,aACV,eAAY,oBACZ,GAAIf,EAAiB;AAAA,MACnB1B,WAAW0C,EACTtC,EAAMuC,MACN9C,KAAc,GAAEO,EAAMP,SAAU,IAAGA,CAAU,IAC7C,CAACa,KAAQN,EAAMwC,QACfxC,EAAMD,MAAMA,CAAK,GACjBH,CACF;AAAA,MACAG,OAAO;AAAA,QACL0C,UAAUvB;AAAAA,QACVwB,KAAK3B,KAAK;AAAA,QACV4B,MAAM9B,KAAK;AAAA,QACXX,UAAAA;AAAAA,MACF;AAAA,MACA,GAAGC;AAAAA,IACJ,CAAA,GAED,UAAA;AAAA,MAAA,gBAAA+B,EAAC,OAAI,EAAA,WAAWlC,EAAMH,SAAUA,UAAQA,GAAA;AAAA,MACvCH,KACC,gBAAAwC,EAAC,OACC,EAAA,WAAWI,EACTtC,EAAMN,MAAM6C,MACZxC,MAAU,UAAUC,EAAMN,MAAMK,MAAM6C,MACtC7C,MAAU,WAAWC,EAAMN,MAAMK,MAAM8C,OACvC9C,MAAU,UAAUC,EAAMN,MAAMK,MAAM+C,IACxC,GACA,eAAY,0BACZ,KAAK1C,GACL,OAAO;AAAA,QACLsC,KAAK1B,KAAU;AAAA,QACf2B,MAAM7B,KAAU;AAAA,QAChBiC,OAAO;AAAA,QACPC,QAAQ;AAAA,QACR,CAACC,EAAkB;AAAA,UAAEnD,WAAWW,EAAmBX;AAAAA,QAAAA,CAAW,CAAC,GAAGE,EAAMN,MAAMI;AAAAA,MAAAA,GAC9E,UAGJ,KAAA;AAAA,IAAA,GAEJ;AAAA,EACF,EAAA,CAAA;AAEJ;"}