{"version":3,"file":"FloatingIndicator.cjs","names":["createVarsResolver","factory","useProps","useStyles","useFloatingIndicator","Box","classes"],"sources":["../../../src/components/FloatingIndicator/FloatingIndicator.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport { useMergedRef, useReducedMotion } from '@mantine/hooks';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  factory,\n  Factory,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { useFloatingIndicator } from './use-floating-indicator';\nimport classes from './FloatingIndicator.module.css';\n\nexport type FloatingIndicatorStylesNames = 'root';\nexport type FloatingIndicatorCssVariables = {\n  root: '--transition-duration';\n};\n\nexport interface FloatingIndicatorProps\n  extends BoxProps, StylesApiProps<FloatingIndicatorFactory>, ElementProps<'div'> {\n  /** Target element over which the indicator is displayed.\n   * The indicator will be positioned to match the target's size and position.\n   * */\n  target: HTMLElement | null | undefined;\n\n  /** Parent container element that must have `position: relative`.\n   * The indicator's position is calculated relative to this element.\n   * */\n  parent: HTMLElement | null | undefined;\n\n  /** Transition duration in ms @default 150 */\n  transitionDuration?: number | string;\n\n  /** Controls whether the indicator should be hidden initially and displayed after the parent's transition ends.\n   * Set to `true` when the parent container has CSS transitions (e.g., `transform: scale()`) to prevent\n   * the indicator from appearing at the wrong position during the parent's animation.\n   * @default false\n   * */\n  displayAfterTransitionEnd?: boolean;\n\n  /** Called when the indicator starts transitioning to a new position */\n  onTransitionStart?: () => void;\n\n  /** Called when the indicator finishes transitioning to a new position */\n  onTransitionEnd?: () => void;\n}\n\nexport type FloatingIndicatorFactory = Factory<{\n  props: FloatingIndicatorProps;\n  ref: HTMLDivElement;\n  stylesNames: FloatingIndicatorStylesNames;\n  vars: FloatingIndicatorCssVariables;\n  ctx: { shouldReduceMotion: boolean };\n}>;\n\nconst varsResolver = createVarsResolver<FloatingIndicatorFactory>(\n  (theme, { transitionDuration }, { shouldReduceMotion }) => {\n    const reduceMotion = theme.respectReducedMotion ? shouldReduceMotion : false;\n    const duration = reduceMotion\n      ? '0ms'\n      : typeof transitionDuration === 'number'\n        ? `${transitionDuration}ms`\n        : transitionDuration || '150ms';\n\n    return {\n      root: {\n        '--transition-duration': duration,\n      },\n    };\n  }\n);\n\nexport const FloatingIndicator = factory<FloatingIndicatorFactory>((_props) => {\n  const props = useProps('FloatingIndicator', null, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    target,\n    parent,\n    transitionDuration,\n    mod,\n    displayAfterTransitionEnd,\n    onTransitionStart,\n    onTransitionEnd,\n    attributes,\n    ref,\n    ...others\n  } = props;\n\n  const shouldReduceMotion = useReducedMotion();\n\n  const getStyles = useStyles<FloatingIndicatorFactory>({\n    name: 'FloatingIndicator',\n    classes,\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    attributes,\n    vars,\n    varsResolver,\n    stylesCtx: { shouldReduceMotion },\n  });\n\n  const innerRef = useRef<HTMLDivElement>(null);\n  const { initialized, hidden } = useFloatingIndicator({\n    target,\n    parent,\n    ref: innerRef,\n    displayAfterTransitionEnd,\n    onTransitionStart,\n    onTransitionEnd,\n  });\n\n  const mergedRef = useMergedRef(ref, innerRef);\n\n  if (!target || !parent) {\n    return null;\n  }\n\n  return (\n    <Box ref={mergedRef} mod={[{ initialized, hidden }, mod]} {...getStyles('root')} {...others} />\n  );\n});\n\nFloatingIndicator.displayName = '@mantine/core/FloatingIndicator';\nFloatingIndicator.classes = classes;\nFloatingIndicator.varsResolver = varsResolver;\n"],"mappings":";;;;;;;;;;;;;AA0DA,MAAM,eAAeA,6BAAAA,oBAClB,OAAO,EAAE,sBAAsB,EAAE,yBAAyB;CAEzD,MAAM,YADe,MAAM,uBAAuB,qBAAqB,SAEnE,QACA,OAAO,uBAAuB,WAC5B,GAAG,mBAAmB,MACtB,sBAAsB;AAE5B,QAAO,EACL,MAAM,EACJ,yBAAyB,UAC1B,EACF;EAEJ;AAED,MAAa,oBAAoBC,gBAAAA,SAAmC,WAAW;CAC7E,MAAM,QAAQC,kBAAAA,SAAS,qBAAqB,MAAM,OAAO;CACzD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,QACA,QACA,oBACA,KACA,2BACA,mBACA,iBACA,YACA,KACA,GAAG,WACD;CAIJ,MAAM,YAAYC,mBAAAA,UAAoC;EACpD,MAAM;EACN,SAAA,iCAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW,EAAE,qBAAA,GAAA,eAAA,mBAd8B,EAcV;EAClC,CAAC;CAEF,MAAM,YAAA,GAAA,MAAA,QAAkC,KAAK;CAC7C,MAAM,EAAE,aAAa,WAAWC,+BAAAA,qBAAqB;EACnD;EACA;EACA,KAAK;EACL;EACA;EACA;EACD,CAAC;CAEF,MAAM,aAAA,GAAA,eAAA,cAAyB,KAAK,SAAS;AAE7C,KAAI,CAAC,UAAU,CAAC,OACd,QAAO;AAGT,QACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,KAAD;EAAK,KAAK;EAAW,KAAK,CAAC;GAAE;GAAa;GAAQ,EAAE,IAAI;EAAE,GAAI,UAAU,OAAO;EAAE,GAAI;EAAU,CAAA;EAEjG;AAEF,kBAAkB,cAAc;AAChC,kBAAkB,UAAUC,iCAAAA;AAC5B,kBAAkB,eAAe"}