import { type EventSuffix, emitter, type GridEvent } from "@pascal-app/core"; import type { ThreeEvent } from "@react-three/fiber"; export function useGridEvents() { const emit = (suffix: EventSuffix, e: ThreeEvent) => { const eventKey = `grid:${suffix}` as `grid:${EventSuffix}`; const payload: GridEvent = { position: [e.point.x, e.point.y, e.point.z], nativeEvent: e, }; emitter.emit(eventKey, payload); }; return { onPointerDown: (e: ThreeEvent) => { if (e.button !== 0) return; emit("pointerdown", e); }, onPointerUp: (e: ThreeEvent) => { if (e.button !== 0) return; emit("pointerup", e); }, onClick: (e: ThreeEvent) => { if (e.button !== 0) return; emit("click", e); }, onPointerEnter: (e: ThreeEvent) => emit("enter", e), onPointerLeave: (e: ThreeEvent) => emit("leave", e), onPointerMove: (e: ThreeEvent) => emit("move", e), onDoubleClick: (e: ThreeEvent) => emit("double-click", e), onContextMenu: (e: ThreeEvent) => emit("context-menu", e), }; }