trans2 / ui /hooks /usePointerToDocument.ts
Map1en
chore: replace prettier with oxfmt and apply formatting (#472)
759cc6f unverified
'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 }
}
}