{"version":3,"file":"useMouse.cjs","sources":["../../hooks/useMouse.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\ntype PositionType = {\n  x: number;\n  y: number;\n};\ntype SizeType = {\n  width: number;\n  height: number;\n};\ntype UseMouseValue = PositionType & SizeType;\n\ntype UseMouseOptions = {\n  resetOnExit?: boolean;\n  enabled?: boolean;\n};\n\nexport function useMouse<T extends HTMLElement = HTMLElement>(\n  options: UseMouseOptions = {}\n) {\n  const { resetOnExit = false, enabled = true } = options;\n  const [value, setValue] = useState<UseMouseValue | null>(null);\n  const elementRef = useRef<T | null>(null);\n\n  // Handle mouse movement using native MouseEvent\n  const handleMouseMove = useCallback(\n    (event: MouseEvent) => {\n      if (!enabled) return;\n\n      const element = elementRef.current;\n      if (element) {\n        const rect = element.getBoundingClientRect();\n        // Calculate coordinates relative to the element\n        const x = Math.max(0, Math.round(event.clientX - rect.left));\n        const y = Math.max(0, Math.round(event.clientY - rect.top));\n        setValue({ x, y, width: rect.width, height: rect.height });\n      } else {\n        setValue({\n          x: event.clientX,\n          y: event.clientY,\n          width: 0,\n          height: 0\n        });\n      }\n    },\n    [enabled]\n  );\n\n  const reset = useCallback(() => {\n    setValue(null);\n  }, []);\n\n  useEffect(() => {\n    if (!enabled) return;\n\n    // If no element is provided, default to document for global tracking\n    const target: HTMLElement | Document = elementRef.current || document;\n\n    target.addEventListener('mousemove', handleMouseMove as EventListener);\n    if (resetOnExit) {\n      target.addEventListener('mouseleave', reset);\n    }\n\n    return () => {\n      target.removeEventListener('mousemove', handleMouseMove as EventListener);\n      if (resetOnExit) {\n        target.removeEventListener('mouseleave', reset);\n      }\n    };\n  }, [enabled, handleMouseMove, reset, resetOnExit]);\n\n  return { ref: elementRef, value, reset };\n}\n"],"names":["useState","useRef","useCallback","useEffect"],"mappings":";;;;AAiBgB,SAAA,QAAQ,CACtB,OAAA,GAA2B,EAAE,EAAA;IAE7B,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAuB,IAAI,CAAC,CAAC;AAC/D,IAAA,MAAM,UAAU,GAAGC,YAAM,CAAW,IAAI,CAAC,CAAC;;AAG1C,IAAA,MAAM,eAAe,GAAGC,iBAAW,CACjC,CAAC,KAAiB,KAAI;AACpB,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AAErB,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;;YAE7C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,YAAA,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;SAC5D;aAAM;AACL,YAAA,QAAQ,CAAC;gBACP,CAAC,EAAE,KAAK,CAAC,OAAO;gBAChB,CAAC,EAAE,KAAK,CAAC,OAAO;AAChB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA,CAAC,CAAC;SACJ;AACH,KAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;AAEF,IAAA,MAAM,KAAK,GAAGA,iBAAW,CAAC,MAAK;QAC7B,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChB,EAAE,EAAE,CAAC,CAAC;IAEPC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;;AAGrB,QAAA,MAAM,MAAM,GAA2B,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;AAEtE,QAAA,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAgC,CAAC,CAAC;QACvE,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SAC9C;AAED,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAgC,CAAC,CAAC;YAC1E,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;aACjD;AACH,SAAC,CAAC;KACH,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEnD,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC3C;;;;"}