UNPKG

@modern-kit/react

Version:
1 lines 3.47 kB
{"version":3,"file":"index.mjs","sources":["../../../src/hooks/useMouse/index.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport { useEventListener } from '../../hooks/useEventListener';\n\ninterface CursorPosition {\n screenX: number | null;\n screenY: number | null;\n clientX: number | null;\n clientY: number | null;\n pageX: number | null;\n pageY: number | null;\n elementRelativeX: number | null;\n elementRelativeY: number | null;\n elementPositionX: number | null;\n elementPositionY: number | null;\n}\n\nconst initialCursorPosition: CursorPosition = {\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n pageX: null,\n pageY: null,\n elementRelativeX: null,\n elementRelativeY: null,\n elementPositionX: null,\n elementPositionY: null,\n};\n\nexport function useMouse<T extends HTMLElement>() {\n const targetRef = useRef<T>(null);\n const [cursorPosition, setCursorPosition] = useState<CursorPosition>(\n initialCursorPosition\n );\n\n const handleMouseMove = useCallback((event: MouseEvent) => {\n const { screenX, screenY, clientX, clientY, pageX, pageY } = event;\n\n let elementRelativeX = null;\n let elementRelativeY = null;\n let elementPositionX = null;\n let elementPositionY = null;\n\n if (targetRef.current) {\n const clientRect = targetRef.current.getBoundingClientRect();\n\n elementRelativeX = clientX - clientRect.left;\n elementRelativeY = clientY - clientRect.top;\n elementPositionX = clientRect.left + window.scrollX;\n elementPositionY = clientRect.top + window.scrollY;\n }\n\n setCursorPosition({\n screenX,\n screenY,\n clientX,\n clientY,\n pageX,\n pageY,\n elementRelativeX,\n elementRelativeY,\n elementPositionX,\n elementPositionY,\n });\n }, []);\n\n useEventListener(\n typeof document !== 'undefined' ? document : null,\n 'mousemove',\n handleMouseMove\n );\n\n return { ref: targetRef, position: cursorPosition };\n}\n"],"names":[],"mappings":";;;;;;AAgBA,MAAM,qBAAA,GAAwC;AAAA,EAC5C,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,IAAA;AAAA,EACT,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,gBAAA,EAAkB,IAAA;AAAA,EAClB,gBAAA,EAAkB,IAAA;AAAA,EAClB,gBAAA,EAAkB,IAAA;AAAA,EAClB,gBAAA,EAAkB;AACpB,CAAA;AAEO,SAAS,QAAA,GAAkC;AAChD,EAAA,MAAM,SAAA,GAAY,OAAU,IAAI,CAAA;AAChC,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA;AAAA,IAC1C;AAAA,GACF;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,CAAC,KAAA,KAAsB;AACzD,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,SAAS,OAAA,EAAS,KAAA,EAAO,OAAM,GAAI,KAAA;AAE7D,IAAA,IAAI,gBAAA,GAAmB,IAAA;AACvB,IAAA,IAAI,gBAAA,GAAmB,IAAA;AACvB,IAAA,IAAI,gBAAA,GAAmB,IAAA;AACvB,IAAA,IAAI,gBAAA,GAAmB,IAAA;AAEvB,IAAA,IAAI,UAAU,OAAA,EAAS;AACrB,MAAA,MAAM,UAAA,GAAa,SAAA,CAAU,OAAA,CAAQ,qBAAA,EAAsB;AAE3D,MAAA,gBAAA,GAAmB,UAAU,UAAA,CAAW,IAAA;AACxC,MAAA,gBAAA,GAAmB,UAAU,UAAA,CAAW,GAAA;AACxC,MAAA,gBAAA,GAAmB,UAAA,CAAW,OAAO,MAAA,CAAO,OAAA;AAC5C,MAAA,gBAAA,GAAmB,UAAA,CAAW,MAAM,MAAA,CAAO,OAAA;AAAA,IAC7C;AAEA,IAAA,iBAAA,CAAkB;AAAA,MAChB,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,gBAAA;AAAA,IACE,OAAO,QAAA,KAAa,WAAA,GAAc,QAAA,GAAW,IAAA;AAAA,IAC7C,WAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,EAAE,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,cAAA,EAAe;AACpD;;;;"}