{"version":3,"file":"tiltGroup.mjs","names":[],"sources":["../../../../package/common/tiltGroup/tiltGroup.tsx"],"sourcesContent":["import {\n  createContext,\n  useContext,\n  useRef,\n  useState,\n  type PointerEvent as ReactPointerEvent,\n  type ReactElement,\n} from 'react';\nimport type { TiltGroupContextValue, TiltGroupProps } from './tiltGroup.types';\n\nexport const TiltGroupContext = createContext<TiltGroupContextValue | null>(null);\n\nexport function useTiltGroup(): TiltGroupContextValue | null {\n  return useContext(TiltGroupContext);\n}\n\nfunction TiltGroup({ children, className, style, ...rest }: TiltGroupProps): ReactElement {\n  const rootRef = useRef<HTMLDivElement>(null);\n  const rafRef = useRef<number | undefined>(undefined);\n  // See Tilt's identical `rafPendingRef` for why this is tracked separately from `rafRef`.\n  const rafPendingRef = useRef(false);\n  const latestClientPos = useRef<{ x: number; y: number } | null>(null);\n  const [value, setValue] = useState<TiltGroupContextValue>({ pointer: null, rect: null });\n\n  const scheduleUpdate = () => {\n    if (rafPendingRef.current) return;\n    rafPendingRef.current = true;\n    rafRef.current = requestAnimationFrame(() => {\n      rafPendingRef.current = false;\n      rafRef.current = undefined;\n      const root = rootRef.current;\n      const pos = latestClientPos.current;\n      if (!root || !pos) return;\n      const rect = root.getBoundingClientRect();\n      setValue({ pointer: { x: pos.x - rect.left, y: pos.y - rect.top }, rect });\n    });\n  };\n\n  const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n    latestClientPos.current = { x: event.clientX, y: event.clientY };\n    scheduleUpdate();\n  };\n\n  const handlePointerLeave = () => {\n    latestClientPos.current = null;\n    if (rafPendingRef.current && rafRef.current !== undefined) {\n      cancelAnimationFrame(rafRef.current);\n      rafPendingRef.current = false;\n      rafRef.current = undefined;\n    }\n    setValue({ pointer: null, rect: null });\n  };\n\n  return (\n    <div\n      {...rest}\n      ref={rootRef}\n      className={className}\n      style={style}\n      onPointerMove={handlePointerMove}\n      onPointerLeave={handlePointerLeave}\n    >\n      <TiltGroupContext.Provider value={value}>{children}</TiltGroupContext.Provider>\n    </div>\n  );\n}\n\nexport default TiltGroup;\n"],"mappings":"qIAUA,IAAa,EAAmB,EAA4C,IAAI,EAEhF,SAAgB,GAA6C,CAC3D,OAAO,EAAW,CAAgB,CACpC,CAEA,SAAS,EAAU,CAAE,WAAU,YAAW,QAAO,GAAG,GAAsC,CACxF,IAAM,EAAU,EAAuB,IAAI,EACrC,EAAS,EAA2B,IAAA,EAAS,EAE7C,EAAgB,EAAO,EAAK,EAC5B,EAAkB,EAAwC,IAAI,EAC9D,CAAC,EAAO,GAAY,EAAgC,CAAE,QAAS,KAAM,KAAM,IAAK,CAAC,EAEjF,MAAuB,CACvB,EAAc,UAClB,EAAc,QAAU,GACxB,EAAO,QAAU,0BAA4B,CAC3C,EAAc,QAAU,GACxB,EAAO,QAAU,IAAA,GACjB,IAAM,EAAO,EAAQ,QACf,EAAM,EAAgB,QAC5B,GAAI,CAAC,GAAQ,CAAC,EAAK,OACnB,IAAM,EAAO,EAAK,sBAAsB,EACxC,EAAS,CAAE,QAAS,CAAE,EAAG,EAAI,EAAI,EAAK,KAAM,EAAG,EAAI,EAAI,EAAK,GAAI,EAAG,MAAK,CAAC,CAC3E,CAAC,EACH,EAEM,EAAqB,GAA6C,CACtE,EAAgB,QAAU,CAAE,EAAG,EAAM,QAAS,EAAG,EAAM,OAAQ,EAC/D,EAAe,CACjB,EAEM,MAA2B,CAC/B,EAAgB,QAAU,KACtB,EAAc,SAAW,EAAO,UAAY,IAAA,KAC9C,qBAAqB,EAAO,OAAO,EACnC,EAAc,QAAU,GACxB,EAAO,QAAU,IAAA,IAEnB,EAAS,CAAE,QAAS,KAAM,KAAM,IAAK,CAAC,CACxC,EAEA,OACE,EAAC,MAAD,CACE,GAAI,EACJ,IAAK,EACM,YACJ,QACP,cAAe,EACf,eAAgB,EAEhB,SAAA,EAAC,EAAiB,SAAlB,CAAkC,QAAQ,UAAoC,CAAA,CAC3E,CAAA,CAET"}