{ "version": 3, "sources": [ "pointerUtils.ts" ], "names": [ "browser", "dom", "domUtils", "hypot", "is", "pointerExtend", "copyCoords", "dest", "src", "page", "x", "y", "client", "timeStamp", "setCoordDeltas", "targetObj", "prev", "cur", "setCoordVelocity", "delta", "dt", "Math", "max", "setZeroCoords", "isNativePointer", "pointer", "Event", "Touch", "getXY", "type", "xy", "getPageXY", "isOperaMobile", "window", "scrollX", "scrollY", "getClientXY", "getPointerId", "number", "pointerId", "identifier", "setCoords", "pointers", "length", "pointerAverage", "getTouchPair", "event", "touches", "array", "changedTouches", "average", "pageX", "pageY", "clientX", "clientY", "screenX", "screenY", "prop", "touchBBox", "minX", "min", "minY", "maxX", "maxY", "left", "top", "right", "bottom", "width", "height", "touchDistance", "deltaSource", "sourceX", "sourceY", "dx", "dy", "touchAngle", "atan2", "PI", "getPointerType", "string", "pointerType", "undefined", "test", "getEventTargets", "path", "func", "composedPath", "getActualElement", "target", "currentTarget", "newCoords", "coordsToEvent", "coords", "this", "buttons", "preventDefault" ], "mappings": "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", "sourcesContent": [ "import { InteractEvent } from '@interactjs/core/InteractEvent'\nimport { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/types/index'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords (dest: CoordsSetMember, src: CoordsSetMember) {\n dest.page = dest.page || {} as any\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || {} as any\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas (targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n}\n\nexport function setCoordVelocity (targetObj: CoordsSetMember, delta: CoordsSetMember) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n}\n\nexport function setZeroCoords (targetObj: CoordsSetMember) {\n targetObj.page.x = 0\n targetObj.page.y = 0\n targetObj.client.x = 0\n targetObj.client.y = 0\n}\n\nexport function isNativePointer (pointer: any) {\n return (pointer instanceof dom.Event || pointer instanceof dom.Touch)\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY (type: string, pointer: PointerType | InteractEvent, xy: Point) {\n xy = xy || {} as Point\n type = type || 'page'\n\n xy.x = pointer[type + 'X' as keyof PointerType]\n xy.y = pointer[type + 'Y' as keyof PointerType]\n\n return xy\n}\n\nexport function getPageXY (pointer: PointerType | InteractEvent, page?: Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n }\n else {\n getXY('page', pointer, page)\n }\n\n return page\n}\n\nexport function getClientXY (pointer: PointerType, client: Point) {\n client = client || {} as any\n\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n getXY('screen', pointer, client)\n }\n else {\n getXY('client', pointer, client)\n }\n\n return client\n}\n\nexport function getPointerId (pointer: { pointerId?: number, identifier?: number, type?: string }) {\n return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier\n}\n\nexport function setCoords (dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n const pointer = (pointers.length > 1\n ? pointerAverage(pointers)\n : pointers[0])\n\n getPageXY(pointer, dest.page)\n getClientXY(pointer, dest.client)\n\n dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair (event: TouchEvent | PointerType[]) {\n const touches: PointerType[] = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n }\n else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n }\n else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n}\n\nexport function pointerAverage (pointers: PointerType[]) {\n const average = {\n pageX : 0,\n pageY : 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n type CoordKeys = keyof typeof average\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop as CoordKeys] += pointer[prop as CoordKeys]\n }\n }\n for (const prop in average) {\n average[prop as CoordKeys] /= pointers.length\n }\n\n return average\n}\n\nexport function touchBBox (event: PointerType[]) {\n if (!event.length) {\n return null\n }\n\n const touches = getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n}\n\nexport function touchDistance (event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = deltaSource + 'X' as 'pageX'\n const sourceY = deltaSource + 'Y' as 'pageY'\n const touches = getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n}\n\nexport function touchAngle (event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = deltaSource + 'X' as 'pageX'\n const sourceY = deltaSource + 'Y' as 'pageY'\n const touches = getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = 180 * Math.atan2(dy, dx) / Math.PI\n\n return angle\n}\n\nexport function getPointerType (pointer: { pointerType?: string, identifier?: number, type?: string }) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]\n // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n : /touch/.test(pointer.type) || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n}\n\n// [ event.target, event.currentTarget ]\nexport function getEventTargets (event: Event) {\n const path = is.func(event.composedPath)\n ? event.composedPath() as Element[]\n : (event as unknown as { path: Element[]}).path\n\n return [\n domUtils.getActualElement(path ? path[0] : event.target as Element),\n domUtils.getActualElement(event.currentTarget as Element),\n ]\n}\n\nexport function newCoords (): CoordsSetMember {\n return {\n page : { x: 0, y: 0 },\n client : { x: 0, y: 0 },\n timeStamp: 0,\n }\n}\n\nexport function coordsToEvent (coords: MockCoords) {\n const event = {\n coords,\n get page () { return this.coords.page },\n get client () { return this.coords.client },\n get timeStamp () { return this.coords.timeStamp },\n get pageX () { return this.coords.page.x },\n get pageY () { return this.coords.page.y },\n get clientX () { return this.coords.client.x },\n get clientY () { return this.coords.client.y },\n get pointerId () { return this.coords.pointerId },\n get target () { return this.coords.target },\n get type () { return this.coords.type },\n get pointerType () { return this.coords.pointerType },\n get buttons () { return this.coords.buttons },\n preventDefault () {},\n }\n\n return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n page: Point\n client: Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n\nexport { pointerExtend }\n" ] }