diff --git a/Libraries/Pressability/Pressability.js b/Libraries/Pressability/Pressability.js index 3a9d8b7bb27..4f70f006cf4 100644 --- a/Libraries/Pressability/Pressability.js +++ b/Libraries/Pressability/Pressability.js @@ -935,16 +935,15 @@ const getTouchFromPressEvent = (event: PressEvent) => { }; function convertPointerEventToMouseEvent(input: PointerEvent): MouseEvent { - const {touchHistory: _, ...synthEvent} = input; - const {clientX, clientY, timestamp} = input.nativeEvent; + const {clientX, clientY} = input.nativeEvent; return { - ...synthEvent, + ...input, nativeEvent: { clientX, clientY, pageX: clientX, pageY: clientY, - timestamp, + timestamp: input.timeStamp, }, }; } diff --git a/Libraries/Types/CoreEventTypes.js b/Libraries/Types/CoreEventTypes.js index 064ede464eb..a62ddb058b0 100644 --- a/Libraries/Types/CoreEventTypes.js +++ b/Libraries/Types/CoreEventTypes.js @@ -83,17 +83,134 @@ export type TextLayoutEvent = SyntheticEvent< |}>, >; -export type PointerEvent = ResponderSyntheticEvent< - $ReadOnly<{| - pointerId: number, - pressure: number, - pointerType: string, - clientX: number, - clientY: number, - target: ?number, - timestamp: number, - |}>, ->; +/** + * https://developer.mozilla.org/en-US/docs/Web/API/UIEvent + */ +export interface NativeUIEvent { + /** + * Returns a long with details about the event, depending on the event type. + */ + +detail: number; +} + +/** + * https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent + */ +export interface NativeMouseEvent extends NativeUIEvent { + /** + * The X coordinate of the mouse pointer in global (screen) coordinates. + */ + +screenX: number; + /** + * The Y coordinate of the mouse pointer in global (screen) coordinates. + */ + +screenY: number; + /** + * The X coordinate of the mouse pointer relative to the whole document. + */ + +pageX: number; + /** + * The Y coordinate of the mouse pointer relative to the whole document. + */ + +pageY: number; + /** + * The X coordinate of the mouse pointer in local (DOM content) coordinates. + */ + +clientX: number; + /** + * The Y coordinate of the mouse pointer in local (DOM content) coordinates. + */ + +clientY: number; + /** + * Alias for NativeMouseEvent.clientX + */ + +x: number; + /** + * Alias for NativeMouseEvent.clientY + */ + +y: number; + /** + * Returns true if the control key was down when the mouse event was fired. + */ + +ctrlKey: boolean; + /** + * Returns true if the shift key was down when the mouse event was fired. + */ + +shiftKey: boolean; + /** + * Returns true if the alt key was down when the mouse event was fired. + */ + +altKey: boolean; + /** + * Returns true if the meta key was down when the mouse event was fired. + */ + +metaKey: boolean; + /** + * The button number that was pressed (if applicable) when the mouse event was fired. + */ + +button: number; + /** + * The buttons being depressed (if any) when the mouse event was fired. + */ + +buttons: number; + /** + * The secondary target for the event, if there is one. + */ + +relatedTarget: null | number | React.ElementRef>; +} + +/** + * https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent + */ +export interface NativePointerEvent extends NativeMouseEvent { + /** + * A unique identifier for the pointer causing the event. + */ + +pointerId: number; + /** + * The width (magnitude on the X axis), in CSS pixels, of the contact geometry of the pointer + */ + +width: number; + /** + * The height (magnitude on the Y axis), in CSS pixels, of the contact geometry of the pointer. + */ + +height: number; + /** + * The normalized pressure of the pointer input in the range 0 to 1, where 0 and 1 represent + * the minimum and maximum pressure the hardware is capable of detecting, respectively. + */ + +pressure: number; + /** + * The normalized tangential pressure of the pointer input (also known as barrel pressure or + * cylinder stress) in the range -1 to 1, where 0 is the neutral position of the control. + */ + +tangentialPressure: number; + /** + * The plane angle (in degrees, in the range of -90 to 90) between the Y–Z plane and the plane + * containing both the pointer (e.g. pen stylus) axis and the Y axis. + */ + +tiltX: number; + /** + * The plane angle (in degrees, in the range of -90 to 90) between the X–Z plane and the plane + * containing both the pointer (e.g. pen stylus) axis and the X axis. + */ + +tiltY: number; + /** + * The clockwise rotation of the pointer (e.g. pen stylus) around its major axis in degrees, + * with a value in the range 0 to 359. + */ + +twist: number; + /** + * Indicates the device type that caused the event (mouse, pen, touch, etc.) + */ + +pointerType: string; + /** + * Indicates if the pointer represents the primary pointer of this pointer type. + */ + +isPrimary: boolean; +} + +export type PointerEvent = SyntheticEvent; export type PressEvent = ResponderSyntheticEvent< $ReadOnly<{|