Skip to content

Commit 2b3cee7

Browse files
motiz88facebook-github-bot
authored andcommitted
[PR] Add type definitions for pointer events
Summary: Closes #6373, closes #3227. The definition of `SyntheticPointerEvent` here was originally based on facebook/react#12507 (released in React DOM 16.4.0) which was missing a couple of fields (`twist` and `tangentialPressure`) from the official spec. I've now updated this branch to include those fields, since facebook/react#13374 has been merged. However, for maximum correctness we should probably wait for that to be _released_ before releasing the corresponding type definitions. I'll update this notice once the relevant React DOM release happens. Pull Request resolved: #6728 Reviewed By: fishythefish Differential Revision: D9338459 Pulled By: mrkev fbshipit-source-id: 263f4922e8a6765e4a2d6553b5af785bdc65a894
1 parent 93d87db commit 2b3cee7

File tree

6 files changed

+338
-276
lines changed

6 files changed

+338
-276
lines changed

lib/dom.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ type ProgressEventHandler = (event: ProgressEvent) => mixed
134134
type ProgressEventListener = {handleEvent: ProgressEventHandler} | ProgressEventHandler
135135
type DragEventHandler = (event: DragEvent) => mixed
136136
type DragEventListener = {handleEvent: DragEventHandler} | DragEventHandler
137+
type PointerEventHandler = (event: PointerEvent) => mixed
138+
type PointerEventListener = {handleEvent: PointerEventHandler} | PointerEventHandler
137139
type AnimationEventHandler = (event: AnimationEvent) => mixed
138140
type AnimationEventListener = {handleEvent: AnimationEventHandler} | AnimationEventHandler
139141
type ClipboardEventHandler = (event: ClipboardEvent) => mixed
@@ -146,6 +148,7 @@ type TouchEventTypes = 'touchstart' | 'touchmove' | 'touchend' | 'touchcancel';
146148
type WheelEventTypes = 'wheel';
147149
type ProgressEventTypes = 'abort' | 'error' | 'load' | 'loadend' | 'loadstart' | 'progress' | 'timeout';
148150
type DragEventTypes = 'drag' | 'dragend' | 'dragenter' | 'dragexit' | 'dragleave' | 'dragover' | 'dragstart' | 'drop';
151+
type PointerEventTypes = 'pointerover' | 'pointerenter' | 'pointerdown' | 'pointermove' | 'pointerup' | 'pointercancel' | 'pointerout' | 'pointerleave' | 'gotpointercapture' | 'lostpointercapture';
149152
type AnimationEventTypes = 'animationstart' | 'animationend' | 'animationiteration';
150153
type ClipboardEventTypes = 'clipboardchange' | 'cut' | 'copy' | 'paste';
151154

@@ -163,6 +166,7 @@ declare class EventTarget {
163166
addEventListener(type: WheelEventTypes, listener: WheelEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
164167
addEventListener(type: ProgressEventTypes, listener: ProgressEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
165168
addEventListener(type: DragEventTypes, listener: DragEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
169+
addEventListener(type: PointerEventTypes, listener: PointerEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
166170
addEventListener(type: AnimationEventTypes, listener: AnimationEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
167171
addEventListener(type: ClipboardEventTypes, listener: ClipboardEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
168172
addEventListener(type: string, listener: EventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
@@ -174,6 +178,7 @@ declare class EventTarget {
174178
removeEventListener(type: WheelEventTypes, listener: WheelEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
175179
removeEventListener(type: ProgressEventTypes, listener: ProgressEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
176180
removeEventListener(type: DragEventTypes, listener: DragEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
181+
removeEventListener(type: PointerEventTypes, listener: PointerEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
177182
removeEventListener(type: AnimationEventTypes, listener: AnimationEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
178183
removeEventListener(type: ClipboardEventTypes, listener: ClipboardEventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
179184
removeEventListener(type: string, listener: EventListener, optionsOrUseCapture?: EventListenerOptionsOrUseCapture): void;
@@ -185,6 +190,7 @@ declare class EventTarget {
185190
attachEvent?: (type: WheelEventTypes, listener: WheelEventListener) => void;
186191
attachEvent?: (type: ProgressEventTypes, listener: ProgressEventListener) => void;
187192
attachEvent?: (type: DragEventTypes, listener: DragEventListener) => void;
193+
attachEvent?: (type: PointerEventTypes, listener: PointerEventListener) => void;
188194
attachEvent?: (type: AnimationEventTypes, listener: AnimationEventListener) => void;
189195
attachEvent?: (type: ClipboardEventTypes, listener: ClipboardEventListener) => void;
190196
attachEvent?: (type: string, listener: EventListener) => void;
@@ -196,6 +202,7 @@ declare class EventTarget {
196202
detachEvent?: (type: WheelEventTypes, listener: WheelEventListener) => void;
197203
detachEvent?: (type: ProgressEventTypes, listener: ProgressEventListener) => void;
198204
detachEvent?: (type: DragEventTypes, listener: DragEventListener) => void;
205+
detachEvent?: (type: PointerEventTypes, listener: PointerEventListener) => void;
199206
detachEvent?: (type: AnimationEventTypes, listener: AnimationEventListener) => void;
200207
detachEvent?: (type: ClipboardEventTypes, listener: ClipboardEventListener) => void;
201208
detachEvent?: (type: string, listener: EventListener) => void;
@@ -322,6 +329,36 @@ declare class DragEvent extends MouseEvent {
322329
dataTransfer: ?DataTransfer; // readonly
323330
}
324331

332+
type PointerEvent$PointerEventInit = MouseEvent$MouseEventInit & {
333+
pointerId?: number;
334+
width?: number;
335+
height?: number;
336+
pressure?: number;
337+
tangentialPressure?: number;
338+
tiltX?: number;
339+
tiltY?: number;
340+
twist?: number;
341+
pointerType?: string;
342+
isPrimary?: boolean;
343+
};
344+
345+
declare class PointerEvent extends MouseEvent {
346+
constructor(
347+
typeArg: string,
348+
pointerEventInit?: PointerEvent$PointerEventInit,
349+
): void;
350+
pointerId: number;
351+
width: number;
352+
height: number;
353+
pressure: number;
354+
tangentialPressure: number;
355+
tiltX: number;
356+
tiltY: number;
357+
twist: number;
358+
pointerType: string;
359+
isPrimary: boolean;
360+
}
361+
325362
declare class ProgressEvent extends Event {
326363
lengthComputable: boolean;
327364
loaded: number;
@@ -1523,6 +1560,7 @@ declare class HTMLElement extends Element {
15231560
onended: ?Function;
15241561
onerror: ?Function;
15251562
onfocus: ?Function;
1563+
ongotpointercapture: ?Function,
15261564
oninput: ?Function;
15271565
oninvalid: ?Function;
15281566
onkeydown: ?Function;
@@ -1532,6 +1570,7 @@ declare class HTMLElement extends Element {
15321570
onloadeddata: ?Function;
15331571
onloadedmetadata: ?Function;
15341572
onloadstart: ?Function;
1573+
onlostpointercapture: ?Function,
15351574
onmousedown: ?Function;
15361575
onmouseenter: ?Function;
15371576
onmouseleave: ?Function;
@@ -1543,6 +1582,14 @@ declare class HTMLElement extends Element {
15431582
onpause: ?Function;
15441583
onplay: ?Function;
15451584
onplaying: ?Function;
1585+
onpointercancel: ?Function,
1586+
onpointerdown: ?Function,
1587+
onpointerenter: ?Function,
1588+
onpointerleave: ?Function,
1589+
onpointermove: ?Function,
1590+
onpointerout: ?Function,
1591+
onpointerover: ?Function,
1592+
onpointerup: ?Function,
15461593
onprogress: ?Function;
15471594
onratechange: ?Function;
15481595
onreadystatechange: ?Function;

lib/react-dom.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,21 @@ declare class SyntheticWheelEvent<
224224
deltaZ: number;
225225
}
226226

227+
declare class SyntheticPointerEvent<
228+
+T: EventTarget = EventTarget,
229+
> extends SyntheticMouseEvent<T> {
230+
pointerId: number;
231+
width: number;
232+
height: number;
233+
pressure: number;
234+
tangentialPressure: number;
235+
tiltX: number;
236+
tiltY: number;
237+
twist: number;
238+
pointerType: string;
239+
isPrimary: boolean;
240+
}
241+
227242
declare class SyntheticTouchEvent<
228243
+T: EventTarget = EventTarget,
229244
> extends SyntheticUIEvent<T> {

tests/bom/bom.exp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ with `HTMLFormElement` [2].
2222
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2323

2424
References:
25-
<BUILTINS>/dom.js:617:36
26-
617| createElement(tagName: 'input'): HTMLInputElement;
25+
<BUILTINS>/dom.js:654:36
26+
654| createElement(tagName: 'input'): HTMLInputElement;
2727
^^^^^^^^^^^^^^^^ [1]
2828
<BUILTINS>/bom.js:330:24
2929
330| constructor(form?: HTMLFormElement): void;

0 commit comments

Comments
 (0)