You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
52 KiB
1 line
52 KiB
{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _defineProperty2 from \"@babel/runtime/helpers/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nvar _excluded = [\"enabled\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nimport Hammer from '@egjs/hammerjs';\nimport findNodeHandle from \"react-native-web/dist/exports/findNodeHandle\";\nimport { State } from \"../State\";\nimport { EventMap } from \"./constants\";\nimport * as NodeManager from \"./NodeManager\";\nvar gestureInstances = 0;\nvar GestureHandler = function () {\n function GestureHandler() {\n var _this = this;\n _classCallCheck(this, GestureHandler);\n _defineProperty(this, \"handlerTag\", void 0);\n _defineProperty(this, \"isGestureRunning\", false);\n _defineProperty(this, \"view\", null);\n _defineProperty(this, \"hasCustomActivationCriteria\", void 0);\n _defineProperty(this, \"hasGestureFailed\", false);\n _defineProperty(this, \"hammer\", null);\n _defineProperty(this, \"initialRotation\", null);\n _defineProperty(this, \"__initialX\", void 0);\n _defineProperty(this, \"__initialY\", void 0);\n _defineProperty(this, \"config\", {});\n _defineProperty(this, \"previousState\", State.UNDETERMINED);\n _defineProperty(this, \"pendingGestures\", {});\n _defineProperty(this, \"oldState\", State.UNDETERMINED);\n _defineProperty(this, \"lastSentState\", null);\n _defineProperty(this, \"gestureInstance\", void 0);\n _defineProperty(this, \"_stillWaiting\", void 0);\n _defineProperty(this, \"propsRef\", void 0);\n _defineProperty(this, \"ref\", void 0);\n _defineProperty(this, \"clearSelfAsPending\", function () {\n if (Array.isArray(_this.config.waitFor)) {\n for (var gesture of _this.config.waitFor) {\n gesture.removePendingGesture(_this.id);\n }\n }\n });\n _defineProperty(this, \"destroy\", function () {\n _this.clearSelfAsPending();\n if (_this.hammer) {\n _this.hammer.stop(false);\n _this.hammer.destroy();\n }\n _this.hammer = null;\n });\n _defineProperty(this, \"isPointInView\", function (_ref) {\n var x = _ref.x,\n y = _ref.y;\n var rect = _this.view.getBoundingClientRect();\n var pointerInside = x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n return pointerInside;\n });\n _defineProperty(this, \"sendEvent\", function (nativeEvent) {\n var _this$propsRef$curren = _this.propsRef.current,\n onGestureHandlerEvent = _this$propsRef$curren.onGestureHandlerEvent,\n onGestureHandlerStateChange = _this$propsRef$curren.onGestureHandlerStateChange;\n var event = _this.transformEventData(nativeEvent);\n invokeNullableMethod(onGestureHandlerEvent, event);\n if (_this.lastSentState !== event.nativeEvent.state) {\n _this.lastSentState = event.nativeEvent.state;\n invokeNullableMethod(onGestureHandlerStateChange, event);\n }\n });\n _defineProperty(this, \"sync\", function () {\n var gesture = _this.hammer.get(_this.name);\n if (!gesture) return;\n var enable = function enable(recognizer, inputData) {\n if (!_this.config.enabled) {\n _this.isGestureRunning = false;\n _this.hasGestureFailed = false;\n return false;\n }\n if (!inputData || !recognizer.options || typeof inputData.maxPointers === 'undefined') {\n return _this.shouldEnableGestureOnSetup;\n }\n if (_this.hasGestureFailed) {\n return false;\n }\n if (!_this.isDiscrete) {\n if (_this.isGestureRunning) {\n return true;\n }\n _this._stillWaiting = _this._getPendingGestures();\n if (_this._stillWaiting.length) {\n for (var _gesture2 of _this._stillWaiting) {\n if (!_gesture2.isDiscrete && _gesture2.isGestureRunning) {\n _this.hasGestureFailed = true;\n _this.isGestureRunning = false;\n return false;\n }\n }\n return false;\n }\n }\n if (!_this.hasCustomActivationCriteria) {\n return true;\n }\n var deltaRotation = _this.initialRotation == null ? 0 : inputData.rotation - _this.initialRotation;\n var _this$isGestureEnable = _this.isGestureEnabledForEvent(_this.getConfig(), recognizer, _objectSpread(_objectSpread({}, inputData), {}, {\n deltaRotation: deltaRotation\n })),\n success = _this$isGestureEnable.success,\n failed = _this$isGestureEnable.failed;\n if (failed) {\n _this.simulateCancelEvent(inputData);\n _this.hasGestureFailed = true;\n }\n return success;\n };\n var params = _this.getHammerConfig();\n gesture.set(_objectSpread(_objectSpread({}, params), {}, {\n enable: enable\n }));\n });\n this.gestureInstance = gestureInstances++;\n this.hasCustomActivationCriteria = false;\n }\n _createClass(GestureHandler, [{\n key: \"id\",\n get: function get() {\n return \"\" + this.name + this.gestureInstance;\n }\n }, {\n key: \"isNative\",\n get: function get() {\n return false;\n }\n }, {\n key: \"isDiscrete\",\n get: function get() {\n return false;\n }\n }, {\n key: \"shouldEnableGestureOnSetup\",\n get: function get() {\n throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');\n }\n }, {\n key: \"getConfig\",\n value: function getConfig() {\n return this.config;\n }\n }, {\n key: \"onWaitingEnded\",\n value: function onWaitingEnded(_gesture) {}\n }, {\n key: \"removePendingGesture\",\n value: function removePendingGesture(id) {\n delete this.pendingGestures[id];\n }\n }, {\n key: \"addPendingGesture\",\n value: function addPendingGesture(gesture) {\n this.pendingGestures[gesture.id] = gesture;\n }\n }, {\n key: \"isGestureEnabledForEvent\",\n value: function isGestureEnabledForEvent(_config, _recognizer, _event) {\n return {\n success: true\n };\n }\n }, {\n key: \"NativeGestureClass\",\n get: function get() {\n throw new Error('Must override GestureHandler.NativeGestureClass');\n }\n }, {\n key: \"updateHasCustomActivationCriteria\",\n value: function updateHasCustomActivationCriteria(_config) {\n return true;\n }\n }, {\n key: \"updateGestureConfig\",\n value: function updateGestureConfig(_ref2) {\n var _ref2$enabled = _ref2.enabled,\n enabled = _ref2$enabled === void 0 ? true : _ref2$enabled,\n props = _objectWithoutProperties(_ref2, _excluded);\n this.clearSelfAsPending();\n this.config = this.ensureConfig(_objectSpread({\n enabled: enabled\n }, props));\n this.hasCustomActivationCriteria = this.updateHasCustomActivationCriteria(this.config);\n if (Array.isArray(this.config.waitFor)) {\n for (var gesture of this.config.waitFor) {\n gesture.addPendingGesture(this);\n }\n }\n if (this.hammer) {\n this.sync();\n }\n return this.config;\n }\n }, {\n key: \"getState\",\n value: function getState(type) {\n if (type == 0) {\n return 0;\n }\n return EventMap[type];\n }\n }, {\n key: \"transformEventData\",\n value: function transformEventData(event) {\n var eventType = event.eventType,\n numberOfPointers = event.maxPointers;\n var changedTouch = event.changedPointers[0];\n var pointerInside = this.isPointInView({\n x: changedTouch.clientX,\n y: changedTouch.clientY\n });\n var state = this.getState(eventType);\n if (state !== this.previousState) {\n this.oldState = this.previousState;\n this.previousState = state;\n }\n return {\n nativeEvent: _objectSpread(_objectSpread({\n numberOfPointers: numberOfPointers,\n state: state,\n pointerInside: pointerInside\n }, this.transformNativeEvent(event)), {}, {\n handlerTag: this.handlerTag,\n target: this.ref,\n oldState: state !== this.previousState || state != 4 ? this.oldState : undefined\n }),\n timeStamp: Date.now()\n };\n }\n }, {\n key: \"transformNativeEvent\",\n value: function transformNativeEvent(_event) {\n return {};\n }\n }, {\n key: \"cancelPendingGestures\",\n value: function cancelPendingGestures(event) {\n for (var gesture of Object.values(this.pendingGestures)) {\n if (gesture && gesture.isGestureRunning) {\n gesture.hasGestureFailed = true;\n gesture.cancelEvent(event);\n }\n }\n }\n }, {\n key: \"notifyPendingGestures\",\n value: function notifyPendingGestures() {\n for (var gesture of Object.values(this.pendingGestures)) {\n if (gesture) {\n gesture.onWaitingEnded(this);\n }\n }\n }\n }, {\n key: \"onGestureEnded\",\n value: function onGestureEnded(event) {\n this.isGestureRunning = false;\n this.cancelPendingGestures(event);\n }\n }, {\n key: \"forceInvalidate\",\n value: function forceInvalidate(event) {\n if (this.isGestureRunning) {\n this.hasGestureFailed = true;\n this.cancelEvent(event);\n }\n }\n }, {\n key: \"cancelEvent\",\n value: function cancelEvent(event) {\n this.notifyPendingGestures();\n this.sendEvent(_objectSpread(_objectSpread({}, event), {}, {\n eventType: Hammer.INPUT_CANCEL,\n isFinal: true\n }));\n this.onGestureEnded(event);\n }\n }, {\n key: \"onRawEvent\",\n value: function onRawEvent(_ref3) {\n var isFirst = _ref3.isFirst;\n if (isFirst) {\n this.hasGestureFailed = false;\n }\n }\n }, {\n key: \"shouldUseTouchEvents\",\n value: function shouldUseTouchEvents(config) {\n var _config$simultaneousH, _config$simultaneousH2;\n return (_config$simultaneousH = (_config$simultaneousH2 = config.simultaneousHandlers) === null || _config$simultaneousH2 === void 0 ? void 0 : _config$simultaneousH2.some(function (handler) {\n return handler.isNative;\n })) !== null && _config$simultaneousH !== void 0 ? _config$simultaneousH : false;\n }\n }, {\n key: \"setView\",\n value: function setView(ref, propsRef) {\n var _this2 = this;\n if (ref == null) {\n this.destroy();\n this.view = null;\n return;\n }\n var SUPPORTS_TOUCH = ('ontouchstart' in window);\n this.propsRef = propsRef;\n this.ref = ref;\n this.view = findNodeHandle(ref);\n this.hammer = SUPPORTS_TOUCH && this.shouldUseTouchEvents(this.config) ? new Hammer.Manager(this.view, {\n inputClass: Hammer.TouchInput\n }) : new Hammer.Manager(this.view);\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n var NativeGestureClass = this.NativeGestureClass;\n var gesture = new NativeGestureClass(this.getHammerConfig());\n this.hammer.add(gesture);\n this.hammer.on('hammer.input', function (ev) {\n if (!_this2.config.enabled) {\n _this2.hasGestureFailed = false;\n _this2.isGestureRunning = false;\n return;\n }\n _this2.onRawEvent(ev);\n if (_this2.initialRotation === null && ev.rotation !== 0) {\n _this2.initialRotation = ev.rotation;\n }\n if (ev.isFinal) {\n setTimeout(function () {\n _this2.initialRotation = null;\n _this2.hasGestureFailed = false;\n });\n }\n });\n this.setupEvents();\n this.sync();\n }\n }, {\n key: \"setupEvents\",\n value: function setupEvents() {\n var _this3 = this;\n if (!this.isDiscrete) {\n this.hammer.on(this.name + \"start\", function (event) {\n return _this3.onStart(event);\n });\n this.hammer.on(this.name + \"end \" + this.name + \"cancel\", function (event) {\n _this3.onGestureEnded(event);\n });\n }\n this.hammer.on(this.name, function (ev) {\n return _this3.onGestureActivated(ev);\n });\n }\n }, {\n key: \"onStart\",\n value: function onStart(_ref4) {\n var deltaX = _ref4.deltaX,\n deltaY = _ref4.deltaY,\n rotation = _ref4.rotation;\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n this.isGestureRunning = true;\n this.__initialX = deltaX;\n this.__initialY = deltaY;\n this.initialRotation = rotation;\n }\n }, {\n key: \"onGestureActivated\",\n value: function onGestureActivated(ev) {\n this.sendEvent(ev);\n }\n }, {\n key: \"onSuccess\",\n value: function onSuccess() {}\n }, {\n key: \"_getPendingGestures\",\n value: function _getPendingGestures() {\n if (Array.isArray(this.config.waitFor) && this.config.waitFor.length) {\n var stillWaiting = this.config.waitFor.filter(function (_ref5) {\n var hasGestureFailed = _ref5.hasGestureFailed;\n return hasGestureFailed === false;\n });\n return stillWaiting;\n }\n return [];\n }\n }, {\n key: \"getHammerConfig\",\n value: function getHammerConfig() {\n var pointers = this.config.minPointers === this.config.maxPointers ? this.config.minPointers : 0;\n return {\n pointers: pointers\n };\n }\n }, {\n key: \"simulateCancelEvent\",\n value: function simulateCancelEvent(_inputData) {}\n }, {\n key: \"ensureConfig\",\n value: function ensureConfig(config) {\n var _this4 = this;\n var props = _objectSpread({}, config);\n if ('minDist' in config) {\n props.minDist = config.minDist;\n props.minDistSq = props.minDist * props.minDist;\n }\n if ('minVelocity' in config) {\n props.minVelocity = config.minVelocity;\n props.minVelocitySq = props.minVelocity * props.minVelocity;\n }\n if ('maxDist' in config) {\n props.maxDist = config.maxDist;\n props.maxDistSq = config.maxDist * config.maxDist;\n }\n if ('waitFor' in config) {\n props.waitFor = asArray(config.waitFor).map(function (_ref6) {\n var handlerTag = _ref6.handlerTag;\n return NodeManager.getHandler(handlerTag);\n }).filter(function (v) {\n return v;\n });\n } else {\n props.waitFor = null;\n }\n if ('simultaneousHandlers' in config) {\n var shouldUseTouchEvents = this.shouldUseTouchEvents(this.config);\n props.simultaneousHandlers = asArray(config.simultaneousHandlers).map(function (handler) {\n if (typeof handler === 'number') {\n return NodeManager.getHandler(handler);\n } else {\n return NodeManager.getHandler(handler.handlerTag);\n }\n }).filter(function (v) {\n return v;\n });\n if (shouldUseTouchEvents !== this.shouldUseTouchEvents(props)) {\n requestAnimationFrame(function () {\n _this4.destroy();\n _this4.setView(_this4.ref, _this4.propsRef);\n });\n }\n } else {\n props.simultaneousHandlers = null;\n }\n var configProps = ['minPointers', 'maxPointers', 'minDist', 'maxDist', 'maxDistSq', 'minVelocitySq', 'minDistSq', 'minVelocity', 'failOffsetXStart', 'failOffsetYStart', 'failOffsetXEnd', 'failOffsetYEnd', 'activeOffsetXStart', 'activeOffsetXEnd', 'activeOffsetYStart', 'activeOffsetYEnd'];\n configProps.forEach(function (prop) {\n if (typeof props[prop] === 'undefined') {\n props[prop] = Number.NaN;\n }\n });\n return props;\n }\n }]);\n return GestureHandler;\n}();\nfunction invokeNullableMethod(method, event) {\n if (method) {\n if (typeof method === 'function') {\n method(event);\n } else {\n if ('__getHandler' in method && typeof method.__getHandler === 'function') {\n var handler = method.__getHandler();\n invokeNullableMethod(handler, event);\n } else {\n if ('__nodeConfig' in method) {\n var argMapping = method.__nodeConfig.argMapping;\n if (Array.isArray(argMapping)) {\n for (var _ref7 of argMapping.entries()) {\n var _ref8 = _slicedToArray(_ref7, 2);\n var index = _ref8[0];\n var _ref8$ = _slicedToArray(_ref8[1], 2);\n var key = _ref8$[0];\n var value = _ref8$[1];\n if (key in event.nativeEvent) {\n var nativeValue = event.nativeEvent[key];\n if (value && value.setValue) {\n value.setValue(nativeValue);\n } else {\n method.__nodeConfig.argMapping[index] = [key, nativeValue];\n }\n }\n }\n }\n }\n }\n }\n }\n}\nfunction asArray(value) {\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\nexport default GestureHandler;","map":{"version":3,"sources":["GestureHandler.ts"],"names":["Hammer","State","EventMap","NodeManager","gestureInstances","GestureHandler","UNDETERMINED","id","name","gestureInstance","isNative","isDiscrete","shouldEnableGestureOnSetup","Error","constructor","hasCustomActivationCriteria","getConfig","config","onWaitingEnded","_gesture","removePendingGesture","pendingGestures","addPendingGesture","gesture","isGestureEnabledForEvent","_config","_recognizer","_event","success","NativeGestureClass","updateHasCustomActivationCriteria","Array","isArray","waitFor","updateGestureConfig","enabled","props","clearSelfAsPending","ensureConfig","hammer","sync","stop","destroy","x","y","rect","view","getBoundingClientRect","pointerInside","left","right","top","bottom","getState","type","transformEventData","event","eventType","maxPointers","numberOfPointers","changedTouch","changedPointers","isPointInView","clientX","clientY","state","previousState","oldState","nativeEvent","transformNativeEvent","handlerTag","target","ref","undefined","timeStamp","Date","now","onGestureHandlerEvent","onGestureHandlerStateChange","propsRef","current","invokeNullableMethod","lastSentState","cancelPendingGestures","Object","values","isGestureRunning","hasGestureFailed","cancelEvent","notifyPendingGestures","onGestureEnded","forceInvalidate","sendEvent","INPUT_CANCEL","isFinal","onRawEvent","isFirst","shouldUseTouchEvents","simultaneousHandlers","some","handler","setView","SUPPORTS_TOUCH","window","findNodeHandle","Manager","inputClass","TouchInput","getHammerConfig","add","on","ev","initialRotation","rotation","setTimeout","setupEvents","onStart","onGestureActivated","deltaX","deltaY","__initialX","__initialY","onSuccess","_getPendingGestures","length","stillWaiting","filter","pointers","minPointers","get","enable","recognizer","inputData","options","_stillWaiting","deltaRotation","failed","simulateCancelEvent","params","set","_inputData","minDist","minDistSq","minVelocity","minVelocitySq","maxDist","maxDistSq","asArray","map","getHandler","v","requestAnimationFrame","configProps","forEach","prop","Number","NaN","method","__getHandler","argMapping","__nodeConfig","index","key","value","entries","nativeValue","setValue"],"mappings":"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","sourcesContent":["/* eslint-disable eslint-comments/no-unlimited-disable */\n/* eslint-disable */\nimport Hammer from '@egjs/hammerjs';\nimport { findNodeHandle } from 'react-native';\n\nimport { State } from '../State';\nimport { EventMap } from './constants';\nimport * as NodeManager from './NodeManager';\n\n// TODO(TS) Replace with HammerInput if https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438/files is merged\nexport type HammerInputExt = Omit<HammerInput, 'destroy' | 'handler' | 'init'>;\n\nexport type Config = Partial<{\n enabled: boolean;\n minPointers: number;\n maxPointers: number;\n minDist: number;\n minDistSq: number;\n minVelocity: number;\n minVelocitySq: number;\n maxDist: number;\n maxDistSq: number;\n failOffsetXStart: number;\n failOffsetYStart: number;\n failOffsetXEnd: number;\n failOffsetYEnd: number;\n activeOffsetXStart: number;\n activeOffsetXEnd: number;\n activeOffsetYStart: number;\n activeOffsetYEnd: number;\n waitFor: any[] | null;\n simultaneousHandlers: any[] | null;\n}>;\n\ntype NativeEvent = ReturnType<GestureHandler['transformEventData']>;\n\nlet gestureInstances = 0;\n\nabstract class GestureHandler {\n public handlerTag: any;\n public isGestureRunning = false;\n public view: number | null = null;\n protected hasCustomActivationCriteria: boolean;\n protected hasGestureFailed = false;\n protected hammer: HammerManager | null = null;\n protected initialRotation: number | null = null;\n protected __initialX: any;\n protected __initialY: any;\n protected config: Config = {};\n protected previousState: State = State.UNDETERMINED;\n private pendingGestures: Record<string, this> = {};\n private oldState: State = State.UNDETERMINED;\n private lastSentState: State | null = null;\n private gestureInstance: number;\n private _stillWaiting: any;\n private propsRef: any;\n private ref: any;\n\n abstract get name(): string;\n\n get id() {\n return `${this.name}${this.gestureInstance}`;\n }\n\n // a simple way to check if GestureHandler is NativeViewGestureHandler, since importing it\n // here to use instanceof would cause import cycle\n get isNative() {\n return false;\n }\n\n get isDiscrete() {\n return false;\n }\n\n get shouldEnableGestureOnSetup(): boolean {\n throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');\n }\n\n constructor() {\n this.gestureInstance = gestureInstances++;\n this.hasCustomActivationCriteria = false;\n }\n\n getConfig() {\n return this.config;\n }\n\n onWaitingEnded(_gesture: this) {}\n\n removePendingGesture(id: string) {\n delete this.pendingGestures[id];\n }\n\n addPendingGesture(gesture: this) {\n this.pendingGestures[gesture.id] = gesture;\n }\n\n isGestureEnabledForEvent(\n _config: any,\n _recognizer: any,\n _event: any\n ): { failed?: boolean; success?: boolean } {\n return { success: true };\n }\n\n get NativeGestureClass(): RecognizerStatic {\n throw new Error('Must override GestureHandler.NativeGestureClass');\n }\n\n updateHasCustomActivationCriteria(_config: Config) {\n return true;\n }\n\n clearSelfAsPending = () => {\n if (Array.isArray(this.config.waitFor)) {\n for (const gesture of this.config.waitFor) {\n gesture.removePendingGesture(this.id);\n }\n }\n };\n\n updateGestureConfig({ enabled = true, ...props }) {\n this.clearSelfAsPending();\n\n this.config = this.ensureConfig({ enabled, ...props });\n this.hasCustomActivationCriteria = this.updateHasCustomActivationCriteria(\n this.config\n );\n if (Array.isArray(this.config.waitFor)) {\n for (const gesture of this.config.waitFor) {\n gesture.addPendingGesture(this);\n }\n }\n\n if (this.hammer) {\n this.sync();\n }\n return this.config;\n }\n\n destroy = () => {\n this.clearSelfAsPending();\n\n if (this.hammer) {\n this.hammer.stop(false);\n this.hammer.destroy();\n }\n this.hammer = null;\n };\n\n isPointInView = ({ x, y }: { x: number; y: number }) => {\n // @ts-ignore FIXME(TS)\n const rect = this.view!.getBoundingClientRect();\n const pointerInside =\n x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n return pointerInside;\n };\n\n getState(type: keyof typeof EventMap): State {\n // @ts-ignore TODO(TS) check if this is needed\n if (type == 0) {\n return 0;\n }\n return EventMap[type];\n }\n\n transformEventData(event: HammerInputExt) {\n const { eventType, maxPointers: numberOfPointers } = event;\n // const direction = DirectionMap[ev.direction];\n const changedTouch = event.changedPointers[0];\n const pointerInside = this.isPointInView({\n x: changedTouch.clientX,\n y: changedTouch.clientY,\n });\n\n // TODO(TS) Remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50966 is merged.\n const state = this.getState(eventType as 1 | 2 | 4 | 8);\n if (state !== this.previousState) {\n this.oldState = this.previousState;\n this.previousState = state;\n }\n\n return {\n nativeEvent: {\n numberOfPointers,\n state,\n pointerInside,\n ...this.transformNativeEvent(event),\n // onHandlerStateChange only\n handlerTag: this.handlerTag,\n target: this.ref,\n // send oldState only when the state was changed, or is different than ACTIVE\n // GestureDetector relies on the presence of `oldState` to differentiate between\n // update events and state change events\n oldState:\n state !== this.previousState || state != 4\n ? this.oldState\n : undefined,\n },\n timeStamp: Date.now(),\n };\n }\n\n transformNativeEvent(_event: HammerInputExt) {\n return {};\n }\n\n sendEvent = (nativeEvent: HammerInputExt) => {\n const { onGestureHandlerEvent, onGestureHandlerStateChange } =\n this.propsRef.current;\n\n const event = this.transformEventData(nativeEvent);\n\n invokeNullableMethod(onGestureHandlerEvent, event);\n if (this.lastSentState !== event.nativeEvent.state) {\n this.lastSentState = event.nativeEvent.state as State;\n invokeNullableMethod(onGestureHandlerStateChange, event);\n }\n };\n\n cancelPendingGestures(event: HammerInputExt) {\n for (const gesture of Object.values(this.pendingGestures)) {\n if (gesture && gesture.isGestureRunning) {\n gesture.hasGestureFailed = true;\n gesture.cancelEvent(event);\n }\n }\n }\n\n notifyPendingGestures() {\n for (const gesture of Object.values(this.pendingGestures)) {\n if (gesture) {\n gesture.onWaitingEnded(this);\n }\n }\n }\n\n // FIXME event is undefined in runtime when firstly invoked (see Draggable example), check other functions taking event as input\n onGestureEnded(event: HammerInputExt) {\n this.isGestureRunning = false;\n this.cancelPendingGestures(event);\n }\n\n forceInvalidate(event: HammerInputExt) {\n if (this.isGestureRunning) {\n this.hasGestureFailed = true;\n this.cancelEvent(event);\n }\n }\n\n cancelEvent(event: HammerInputExt) {\n this.notifyPendingGestures();\n this.sendEvent({\n ...event,\n eventType: Hammer.INPUT_CANCEL,\n isFinal: true,\n });\n this.onGestureEnded(event);\n }\n\n onRawEvent({ isFirst }: HammerInputExt) {\n if (isFirst) {\n this.hasGestureFailed = false;\n }\n }\n\n shouldUseTouchEvents(config: Config) {\n return (\n config.simultaneousHandlers?.some((handler) => handler.isNative) ?? false\n );\n }\n\n setView(ref: Parameters<typeof findNodeHandle>['0'], propsRef: any) {\n if (ref == null) {\n this.destroy();\n this.view = null;\n return;\n }\n\n // @ts-ignore window doesn't exist on global type as we don't want to use Node types\n const SUPPORTS_TOUCH = 'ontouchstart' in window;\n this.propsRef = propsRef;\n this.ref = ref;\n\n this.view = findNodeHandle(ref);\n\n // When the browser starts handling the gesture (e.g. scrolling), it sends a pointercancel event and stops\n // sending additional pointer events. This is not the case with touch events, so if the gesture is simultaneous\n // with a NativeGestureHandler, we need to check if touch events are supported and use them if possible.\n this.hammer =\n SUPPORTS_TOUCH && this.shouldUseTouchEvents(this.config)\n ? new Hammer.Manager(this.view as any, {\n inputClass: Hammer.TouchInput,\n })\n : new Hammer.Manager(this.view as any);\n\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n\n const { NativeGestureClass } = this;\n // @ts-ignore TODO(TS)\n const gesture = new NativeGestureClass(this.getHammerConfig());\n this.hammer.add(gesture);\n\n this.hammer.on('hammer.input', (ev: HammerInput) => {\n if (!this.config.enabled) {\n this.hasGestureFailed = false;\n this.isGestureRunning = false;\n return;\n }\n\n this.onRawEvent(ev as unknown as HammerInputExt);\n\n // TODO: Bacon: Check against something other than null\n // The isFirst value is not called when the first rotation is calculated.\n if (this.initialRotation === null && ev.rotation !== 0) {\n this.initialRotation = ev.rotation;\n }\n if (ev.isFinal) {\n // in favor of a willFail otherwise the last frame of the gesture will be captured.\n setTimeout(() => {\n this.initialRotation = null;\n this.hasGestureFailed = false;\n });\n }\n });\n\n this.setupEvents();\n this.sync();\n }\n\n setupEvents() {\n // TODO(TS) Hammer types aren't exactly that what we get in runtime\n if (!this.isDiscrete) {\n this.hammer!.on(`${this.name}start`, (event: HammerInput) =>\n this.onStart(event as unknown as HammerInputExt)\n );\n this.hammer!.on(\n `${this.name}end ${this.name}cancel`,\n (event: HammerInput) => {\n this.onGestureEnded(event as unknown as HammerInputExt);\n }\n );\n }\n this.hammer!.on(this.name, (ev: HammerInput) =>\n this.onGestureActivated(ev as unknown as HammerInputExt)\n ); // TODO(TS) remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438 is merged\n }\n\n onStart({ deltaX, deltaY, rotation }: HammerInputExt) {\n // Reset the state for the next gesture\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n\n this.isGestureRunning = true;\n this.__initialX = deltaX;\n this.__initialY = deltaY;\n this.initialRotation = rotation;\n }\n\n onGestureActivated(ev: HammerInputExt) {\n this.sendEvent(ev);\n }\n\n onSuccess() {}\n\n _getPendingGestures() {\n if (Array.isArray(this.config.waitFor) && this.config.waitFor.length) {\n // Get the list of gestures that this gesture is still waiting for.\n // Use `=== false` in case a ref that isn't a gesture handler is used.\n const stillWaiting = this.config.waitFor.filter(\n ({ hasGestureFailed }) => hasGestureFailed === false\n );\n return stillWaiting;\n }\n return [];\n }\n\n getHammerConfig() {\n const pointers =\n this.config.minPointers === this.config.maxPointers\n ? this.config.minPointers\n : 0;\n return {\n pointers,\n };\n }\n\n sync = () => {\n const gesture = this.hammer!.get(this.name);\n if (!gesture) return;\n\n const enable = (recognizer: any, inputData: any) => {\n if (!this.config.enabled) {\n this.isGestureRunning = false;\n this.hasGestureFailed = false;\n return false;\n }\n\n // Prevent events before the system is ready.\n if (\n !inputData ||\n !recognizer.options ||\n typeof inputData.maxPointers === 'undefined'\n ) {\n return this.shouldEnableGestureOnSetup;\n }\n\n if (this.hasGestureFailed) {\n return false;\n }\n\n if (!this.isDiscrete) {\n if (this.isGestureRunning) {\n return true;\n }\n // The built-in hammer.js \"waitFor\" doesn't work across multiple views.\n // Only process if there are views to wait for.\n this._stillWaiting = this._getPendingGestures();\n // This gesture should continue waiting.\n if (this._stillWaiting.length) {\n // Check to see if one of the gestures you're waiting for has started.\n // If it has then the gesture should fail.\n for (const gesture of this._stillWaiting) {\n // When the target gesture has started, this gesture must force fail.\n if (!gesture.isDiscrete && gesture.isGestureRunning) {\n this.hasGestureFailed = true;\n this.isGestureRunning = false;\n return false;\n }\n }\n // This gesture shouldn't start until the others have finished.\n return false;\n }\n }\n\n // Use default behaviour\n if (!this.hasCustomActivationCriteria) {\n return true;\n }\n\n const deltaRotation =\n this.initialRotation == null\n ? 0\n : inputData.rotation - this.initialRotation;\n // @ts-ignore FIXME(TS)\n const { success, failed } = this.isGestureEnabledForEvent(\n this.getConfig(),\n recognizer,\n {\n ...inputData,\n deltaRotation,\n }\n );\n\n if (failed) {\n this.simulateCancelEvent(inputData);\n this.hasGestureFailed = true;\n }\n return success;\n };\n\n const params = this.getHammerConfig();\n // @ts-ignore FIXME(TS)\n gesture.set({ ...params, enable });\n };\n\n simulateCancelEvent(_inputData: any) {}\n\n // Validate the props\n ensureConfig(config: Config): Required<Config> {\n const props = { ...config };\n\n // TODO(TS) We use ! to assert that if property is present then value is not empty (null, undefined)\n if ('minDist' in config) {\n props.minDist = config.minDist;\n props.minDistSq = props.minDist! * props.minDist!;\n }\n if ('minVelocity' in config) {\n props.minVelocity = config.minVelocity;\n props.minVelocitySq = props.minVelocity! * props.minVelocity!;\n }\n if ('maxDist' in config) {\n props.maxDist = config.maxDist;\n props.maxDistSq = config.maxDist! * config.maxDist!;\n }\n if ('waitFor' in config) {\n props.waitFor = asArray(config.waitFor)\n .map(({ handlerTag }: { handlerTag: number }) =>\n NodeManager.getHandler(handlerTag)\n )\n .filter((v) => v);\n } else {\n props.waitFor = null;\n }\n if ('simultaneousHandlers' in config) {\n const shouldUseTouchEvents = this.shouldUseTouchEvents(this.config);\n props.simultaneousHandlers = asArray(config.simultaneousHandlers)\n .map((handler: number | GestureHandler) => {\n if (typeof handler === 'number') {\n return NodeManager.getHandler(handler);\n } else {\n return NodeManager.getHandler(handler.handlerTag);\n }\n })\n .filter((v) => v);\n\n if (shouldUseTouchEvents !== this.shouldUseTouchEvents(props)) {\n requestAnimationFrame(() => {\n // if the undelying event API needs to be changed, we need to unmount and mount\n // the hammer instance again.\n this.destroy();\n this.setView(this.ref, this.propsRef);\n });\n }\n } else {\n props.simultaneousHandlers = null;\n }\n\n const configProps = [\n 'minPointers',\n 'maxPointers',\n 'minDist',\n 'maxDist',\n 'maxDistSq',\n 'minVelocitySq',\n 'minDistSq',\n 'minVelocity',\n 'failOffsetXStart',\n 'failOffsetYStart',\n 'failOffsetXEnd',\n 'failOffsetYEnd',\n 'activeOffsetXStart',\n 'activeOffsetXEnd',\n 'activeOffsetYStart',\n 'activeOffsetYEnd',\n ] as const;\n configProps.forEach((prop: typeof configProps[number]) => {\n if (typeof props[prop] === 'undefined') {\n props[prop] = Number.NaN;\n }\n });\n return props as Required<Config>; // TODO(TS) how to convince TS that props are filled?\n }\n}\n\n// TODO(TS) investigate this method\n// Used for sending data to a callback or AnimatedEvent\nfunction invokeNullableMethod(\n method:\n | ((event: NativeEvent) => void)\n | { __getHandler: () => (event: NativeEvent) => void }\n | { __nodeConfig: { argMapping: any } },\n event: NativeEvent\n) {\n if (method) {\n if (typeof method === 'function') {\n method(event);\n } else {\n // For use with reanimated's AnimatedEvent\n if (\n '__getHandler' in method &&\n typeof method.__getHandler === 'function'\n ) {\n const handler = method.__getHandler();\n invokeNullableMethod(handler, event);\n } else {\n if ('__nodeConfig' in method) {\n const { argMapping } = method.__nodeConfig;\n if (Array.isArray(argMapping)) {\n for (const [index, [key, value]] of argMapping.entries()) {\n if (key in event.nativeEvent) {\n // @ts-ignore fix method type\n const nativeValue = event.nativeEvent[key];\n if (value && value.setValue) {\n // Reanimated API\n value.setValue(nativeValue);\n } else {\n // RN Animated API\n method.__nodeConfig.argMapping[index] = [key, nativeValue];\n }\n }\n }\n }\n }\n }\n }\n }\n}\n\nfunction asArray<T>(value: T | T[]) {\n // TODO(TS) use config.waitFor type\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\n\nexport default GestureHandler;\n"]},"metadata":{},"sourceType":"module"} |