{ "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", "angle", "atan2", "PI", "getPointerType", "string", "pointerType", "undefined", "test", "getEventTargets", "path", "func", "composedPath", "getActualElement", "target", "currentTarget", "newCoords", "coordsToEvent", "coords", "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" ] }