File size: 767 Bytes
fc414a2
 
32849cc
fc414a2
 
32849cc
759cc6f
32849cc
759cc6f
fc414a2
 
 
32849cc
fc414a2
32849cc
 
 
 
 
 
 
 
 
fc414a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'use client'

import type React from 'react'

export type DocumentPointer = { x: number; y: number }

export type PointerEventLike = React.PointerEvent<Element> | React.MouseEvent<Element> | MouseEvent

export type PointerToDocumentFn = (event: PointerEventLike) => DocumentPointer | null

export function usePointerToDocument(
  scaleRatio: number,
  ref: React.RefObject<HTMLElement | null>,
): PointerToDocumentFn {
  return (event: PointerEventLike) => {
    const container = ref.current
    if (!container) return null
    const rect = container.getBoundingClientRect()
    const x = (event.clientX - rect.left) / scaleRatio
    const y = (event.clientY - rect.top) / scaleRatio
    if (Number.isNaN(x) || Number.isNaN(y)) return null
    return { x, y }
  }
}