@depup/testing-library__user-event 14.6.3-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +25 -0
  3. package/changes.json +5 -0
  4. package/dist/cjs/clipboard/copy.js +22 -0
  5. package/dist/cjs/clipboard/cut.js +22 -0
  6. package/dist/cjs/clipboard/index.js +11 -0
  7. package/dist/cjs/clipboard/paste.js +24 -0
  8. package/dist/cjs/convenience/click.js +35 -0
  9. package/dist/cjs/convenience/hover.js +19 -0
  10. package/dist/cjs/convenience/index.js +14 -0
  11. package/dist/cjs/convenience/tab.js +7 -0
  12. package/dist/cjs/document/UI.js +90 -0
  13. package/dist/cjs/document/copySelection.js +29 -0
  14. package/dist/cjs/document/getValueOrTextContent.js +18 -0
  15. package/dist/cjs/document/index.js +17 -0
  16. package/dist/cjs/document/interceptor.js +104 -0
  17. package/dist/cjs/document/patchFocus.js +106 -0
  18. package/dist/cjs/document/prepareDocument.js +58 -0
  19. package/dist/cjs/document/trackValue.js +57 -0
  20. package/dist/cjs/event/behavior/click.js +32 -0
  21. package/dist/cjs/event/behavior/cut.js +14 -0
  22. package/dist/cjs/event/behavior/index.js +13 -0
  23. package/dist/cjs/event/behavior/keydown.js +128 -0
  24. package/dist/cjs/event/behavior/keypress.js +51 -0
  25. package/dist/cjs/event/behavior/keyup.js +17 -0
  26. package/dist/cjs/event/behavior/paste.js +18 -0
  27. package/dist/cjs/event/behavior/registry.js +5 -0
  28. package/dist/cjs/event/createEvent.js +193 -0
  29. package/dist/cjs/event/dispatchEvent.js +54 -0
  30. package/dist/cjs/event/eventMap.js +281 -0
  31. package/dist/cjs/event/focus.js +34 -0
  32. package/dist/cjs/event/index.js +22 -0
  33. package/dist/cjs/event/input.js +158 -0
  34. package/dist/cjs/event/radio.js +27 -0
  35. package/dist/cjs/event/selection/getInputRange.js +18 -0
  36. package/dist/cjs/event/selection/getTargetTypeAndSelection.js +31 -0
  37. package/dist/cjs/event/selection/index.js +24 -0
  38. package/dist/cjs/event/selection/modifySelection.js +21 -0
  39. package/dist/cjs/event/selection/modifySelectionPerMouse.js +40 -0
  40. package/dist/cjs/event/selection/moveSelection.js +38 -0
  41. package/dist/cjs/event/selection/resolveCaretPosition.js +60 -0
  42. package/dist/cjs/event/selection/selectAll.js +38 -0
  43. package/dist/cjs/event/selection/setSelection.js +21 -0
  44. package/dist/cjs/event/selection/setSelectionPerMouse.js +79 -0
  45. package/dist/cjs/event/selection/setSelectionRange.js +31 -0
  46. package/dist/cjs/event/selection/updateSelectionOnFocus.js +40 -0
  47. package/dist/cjs/event/types.js +2 -0
  48. package/dist/cjs/event/wrapEvent.js +10 -0
  49. package/dist/cjs/index.js +12 -0
  50. package/dist/cjs/keyboard/index.js +40 -0
  51. package/dist/cjs/keyboard/keyMap.js +178 -0
  52. package/dist/cjs/keyboard/parseKeyDef.js +45 -0
  53. package/dist/cjs/options.js +14 -0
  54. package/dist/cjs/package.json +3 -0
  55. package/dist/cjs/pointer/index.js +74 -0
  56. package/dist/cjs/pointer/keyMap.js +33 -0
  57. package/dist/cjs/pointer/parseKeyDef.js +23 -0
  58. package/dist/cjs/setup/api.js +35 -0
  59. package/dist/cjs/setup/directApi.js +75 -0
  60. package/dist/cjs/setup/index.js +11 -0
  61. package/dist/cjs/setup/setup.js +125 -0
  62. package/dist/cjs/setup/wrapAsync.js +11 -0
  63. package/dist/cjs/system/index.js +42 -0
  64. package/dist/cjs/system/keyboard.js +165 -0
  65. package/dist/cjs/system/pointer/buttons.js +80 -0
  66. package/dist/cjs/system/pointer/device.js +32 -0
  67. package/dist/cjs/system/pointer/index.js +156 -0
  68. package/dist/cjs/system/pointer/mouse.js +204 -0
  69. package/dist/cjs/system/pointer/pointer.js +129 -0
  70. package/dist/cjs/system/pointer/shared.js +8 -0
  71. package/dist/cjs/utility/clear.js +32 -0
  72. package/dist/cjs/utility/index.js +14 -0
  73. package/dist/cjs/utility/selectOptions.js +114 -0
  74. package/dist/cjs/utility/type.js +23 -0
  75. package/dist/cjs/utility/upload.js +62 -0
  76. package/dist/cjs/utils/click/isClickableInput.js +20 -0
  77. package/dist/cjs/utils/dataTransfer/Blob.js +16 -0
  78. package/dist/cjs/utils/dataTransfer/Clipboard.js +174 -0
  79. package/dist/cjs/utils/dataTransfer/DataTransfer.js +134 -0
  80. package/dist/cjs/utils/dataTransfer/FileList.js +24 -0
  81. package/dist/cjs/utils/edit/isContentEditable.js +18 -0
  82. package/dist/cjs/utils/edit/isEditable.js +29 -0
  83. package/dist/cjs/utils/edit/maxLength.js +26 -0
  84. package/dist/cjs/utils/edit/setFiles.js +58 -0
  85. package/dist/cjs/utils/edit/timeValue.js +40 -0
  86. package/dist/cjs/utils/focus/cursor.js +126 -0
  87. package/dist/cjs/utils/focus/getActiveElement.js +25 -0
  88. package/dist/cjs/utils/focus/getTabDestination.js +80 -0
  89. package/dist/cjs/utils/focus/isFocusable.js +9 -0
  90. package/dist/cjs/utils/focus/selection.js +20 -0
  91. package/dist/cjs/utils/focus/selector.js +15 -0
  92. package/dist/cjs/utils/index.js +78 -0
  93. package/dist/cjs/utils/keyDef/readNextDescriptor.js +91 -0
  94. package/dist/cjs/utils/misc/cloneEvent.js +7 -0
  95. package/dist/cjs/utils/misc/findClosest.js +14 -0
  96. package/dist/cjs/utils/misc/getDocumentFromNode.js +10 -0
  97. package/dist/cjs/utils/misc/getTreeDiff.js +25 -0
  98. package/dist/cjs/utils/misc/getWindow.js +19 -0
  99. package/dist/cjs/utils/misc/isDescendantOrSelf.js +14 -0
  100. package/dist/cjs/utils/misc/isDisabled.js +33 -0
  101. package/dist/cjs/utils/misc/isElementType.js +20 -0
  102. package/dist/cjs/utils/misc/isVisible.js +19 -0
  103. package/dist/cjs/utils/misc/level.js +17 -0
  104. package/dist/cjs/utils/misc/wait.js +14 -0
  105. package/dist/cjs/utils/pointer/cssPointerEvents.js +102 -0
  106. package/dist/esm/clipboard/copy.js +20 -0
  107. package/dist/esm/clipboard/cut.js +20 -0
  108. package/dist/esm/clipboard/index.js +3 -0
  109. package/dist/esm/clipboard/paste.js +22 -0
  110. package/dist/esm/convenience/click.js +31 -0
  111. package/dist/esm/convenience/hover.js +16 -0
  112. package/dist/esm/convenience/index.js +3 -0
  113. package/dist/esm/convenience/tab.js +5 -0
  114. package/dist/esm/document/UI.js +77 -0
  115. package/dist/esm/document/copySelection.js +27 -0
  116. package/dist/esm/document/getValueOrTextContent.js +16 -0
  117. package/dist/esm/document/index.js +4 -0
  118. package/dist/esm/document/interceptor.js +99 -0
  119. package/dist/esm/document/patchFocus.js +103 -0
  120. package/dist/esm/document/prepareDocument.js +56 -0
  121. package/dist/esm/document/trackValue.js +53 -0
  122. package/dist/esm/event/behavior/click.js +30 -0
  123. package/dist/esm/event/behavior/cut.js +12 -0
  124. package/dist/esm/event/behavior/index.js +7 -0
  125. package/dist/esm/event/behavior/keydown.js +126 -0
  126. package/dist/esm/event/behavior/keypress.js +49 -0
  127. package/dist/esm/event/behavior/keyup.js +15 -0
  128. package/dist/esm/event/behavior/paste.js +16 -0
  129. package/dist/esm/event/behavior/registry.js +3 -0
  130. package/dist/esm/event/createEvent.js +191 -0
  131. package/dist/esm/event/dispatchEvent.js +50 -0
  132. package/dist/esm/event/eventMap.js +277 -0
  133. package/dist/esm/event/focus.js +31 -0
  134. package/dist/esm/event/index.js +7 -0
  135. package/dist/esm/event/input.js +156 -0
  136. package/dist/esm/event/radio.js +25 -0
  137. package/dist/esm/event/selection/getInputRange.js +16 -0
  138. package/dist/esm/event/selection/getTargetTypeAndSelection.js +29 -0
  139. package/dist/esm/event/selection/index.js +9 -0
  140. package/dist/esm/event/selection/modifySelection.js +19 -0
  141. package/dist/esm/event/selection/modifySelectionPerMouse.js +38 -0
  142. package/dist/esm/event/selection/moveSelection.js +36 -0
  143. package/dist/esm/event/selection/resolveCaretPosition.js +58 -0
  144. package/dist/esm/event/selection/selectAll.js +35 -0
  145. package/dist/esm/event/selection/setSelection.js +19 -0
  146. package/dist/esm/event/selection/setSelectionPerMouse.js +77 -0
  147. package/dist/esm/event/selection/setSelectionRange.js +29 -0
  148. package/dist/esm/event/selection/updateSelectionOnFocus.js +38 -0
  149. package/dist/esm/event/types.js +1 -0
  150. package/dist/esm/event/wrapEvent.js +8 -0
  151. package/dist/esm/index.js +2 -0
  152. package/dist/esm/keyboard/index.js +37 -0
  153. package/dist/esm/keyboard/keyMap.js +176 -0
  154. package/dist/esm/keyboard/parseKeyDef.js +43 -0
  155. package/dist/esm/options.js +12 -0
  156. package/dist/esm/package.json +3 -0
  157. package/dist/esm/pointer/index.js +72 -0
  158. package/dist/esm/pointer/keyMap.js +31 -0
  159. package/dist/esm/pointer/parseKeyDef.js +21 -0
  160. package/dist/esm/setup/api.js +33 -0
  161. package/dist/esm/setup/directApi.js +58 -0
  162. package/dist/esm/setup/index.js +9 -0
  163. package/dist/esm/setup/setup.js +119 -0
  164. package/dist/esm/setup/wrapAsync.js +9 -0
  165. package/dist/esm/system/index.js +40 -0
  166. package/dist/esm/system/keyboard.js +162 -0
  167. package/dist/esm/system/pointer/buttons.js +74 -0
  168. package/dist/esm/system/pointer/device.js +30 -0
  169. package/dist/esm/system/pointer/index.js +154 -0
  170. package/dist/esm/system/pointer/mouse.js +202 -0
  171. package/dist/esm/system/pointer/pointer.js +127 -0
  172. package/dist/esm/system/pointer/shared.js +6 -0
  173. package/dist/esm/utility/clear.js +30 -0
  174. package/dist/esm/utility/index.js +4 -0
  175. package/dist/esm/utility/selectOptions.js +111 -0
  176. package/dist/esm/utility/type.js +21 -0
  177. package/dist/esm/utility/upload.js +60 -0
  178. package/dist/esm/utils/click/isClickableInput.js +18 -0
  179. package/dist/esm/utils/dataTransfer/Blob.js +14 -0
  180. package/dist/esm/utils/dataTransfer/Clipboard.js +167 -0
  181. package/dist/esm/utils/dataTransfer/DataTransfer.js +131 -0
  182. package/dist/esm/utils/dataTransfer/FileList.js +22 -0
  183. package/dist/esm/utils/edit/isContentEditable.js +15 -0
  184. package/dist/esm/utils/edit/isEditable.js +26 -0
  185. package/dist/esm/utils/edit/maxLength.js +23 -0
  186. package/dist/esm/utils/edit/setFiles.js +56 -0
  187. package/dist/esm/utils/edit/timeValue.js +37 -0
  188. package/dist/esm/utils/focus/cursor.js +124 -0
  189. package/dist/esm/utils/focus/getActiveElement.js +22 -0
  190. package/dist/esm/utils/focus/getTabDestination.js +78 -0
  191. package/dist/esm/utils/focus/isFocusable.js +7 -0
  192. package/dist/esm/utils/focus/selection.js +17 -0
  193. package/dist/esm/utils/focus/selector.js +13 -0
  194. package/dist/esm/utils/index.js +29 -0
  195. package/dist/esm/utils/keyDef/readNextDescriptor.js +89 -0
  196. package/dist/esm/utils/misc/cloneEvent.js +5 -0
  197. package/dist/esm/utils/misc/findClosest.js +12 -0
  198. package/dist/esm/utils/misc/getDocumentFromNode.js +8 -0
  199. package/dist/esm/utils/misc/getTreeDiff.js +23 -0
  200. package/dist/esm/utils/misc/getWindow.js +17 -0
  201. package/dist/esm/utils/misc/isDescendantOrSelf.js +12 -0
  202. package/dist/esm/utils/misc/isDisabled.js +31 -0
  203. package/dist/esm/utils/misc/isElementType.js +18 -0
  204. package/dist/esm/utils/misc/isVisible.js +17 -0
  205. package/dist/esm/utils/misc/level.js +13 -0
  206. package/dist/esm/utils/misc/wait.js +12 -0
  207. package/dist/esm/utils/pointer/cssPointerEvents.js +99 -0
  208. package/dist/types/clipboard/copy.d.ts +2 -0
  209. package/dist/types/clipboard/cut.d.ts +2 -0
  210. package/dist/types/clipboard/index.d.ts +3 -0
  211. package/dist/types/clipboard/paste.d.ts +2 -0
  212. package/dist/types/convenience/click.d.ts +4 -0
  213. package/dist/types/convenience/hover.d.ts +3 -0
  214. package/dist/types/convenience/index.d.ts +3 -0
  215. package/dist/types/convenience/tab.d.ts +4 -0
  216. package/dist/types/document/UI.d.ts +42 -0
  217. package/dist/types/document/copySelection.d.ts +1 -0
  218. package/dist/types/document/getValueOrTextContent.d.ts +1 -0
  219. package/dist/types/document/index.d.ts +5 -0
  220. package/dist/types/document/interceptor.d.ts +19 -0
  221. package/dist/types/document/patchFocus.d.ts +9 -0
  222. package/dist/types/document/prepareDocument.d.ts +8 -0
  223. package/dist/types/document/trackValue.d.ts +17 -0
  224. package/dist/types/event/behavior/click.d.ts +1 -0
  225. package/dist/types/event/behavior/cut.d.ts +1 -0
  226. package/dist/types/event/behavior/index.d.ts +8 -0
  227. package/dist/types/event/behavior/keydown.d.ts +1 -0
  228. package/dist/types/event/behavior/keypress.d.ts +1 -0
  229. package/dist/types/event/behavior/keyup.d.ts +1 -0
  230. package/dist/types/event/behavior/paste.d.ts +1 -0
  231. package/dist/types/event/behavior/registry.d.ts +8 -0
  232. package/dist/types/event/createEvent.d.ts +2 -0
  233. package/dist/types/event/dispatchEvent.d.ts +5 -0
  234. package/dist/types/event/eventMap.d.ts +265 -0
  235. package/dist/types/event/focus.d.ts +5 -0
  236. package/dist/types/event/index.d.ts +7 -0
  237. package/dist/types/event/input.d.ts +2 -0
  238. package/dist/types/event/radio.d.ts +4 -0
  239. package/dist/types/event/selection/getInputRange.d.ts +5 -0
  240. package/dist/types/event/selection/getTargetTypeAndSelection.d.ts +10 -0
  241. package/dist/types/event/selection/index.d.ts +15 -0
  242. package/dist/types/event/selection/modifySelection.d.ts +8 -0
  243. package/dist/types/event/selection/modifySelectionPerMouse.d.ts +7 -0
  244. package/dist/types/event/selection/moveSelection.d.ts +4 -0
  245. package/dist/types/event/selection/resolveCaretPosition.d.ts +8 -0
  246. package/dist/types/event/selection/selectAll.d.ts +5 -0
  247. package/dist/types/event/selection/setSelection.d.ts +10 -0
  248. package/dist/types/event/selection/setSelectionPerMouse.d.ts +8 -0
  249. package/dist/types/event/selection/setSelectionRange.d.ts +6 -0
  250. package/dist/types/event/selection/updateSelectionOnFocus.d.ts +5 -0
  251. package/dist/types/event/types.d.ts +20 -0
  252. package/dist/types/event/wrapEvent.d.ts +1 -0
  253. package/dist/types/index.d.ts +6 -0
  254. package/dist/types/keyboard/index.d.ts +3 -0
  255. package/dist/types/keyboard/keyMap.d.ts +5 -0
  256. package/dist/types/keyboard/parseKeyDef.d.ts +17 -0
  257. package/dist/types/options.d.ts +115 -0
  258. package/dist/types/pointer/index.d.ts +28 -0
  259. package/dist/types/pointer/keyMap.d.ts +2 -0
  260. package/dist/types/pointer/parseKeyDef.d.ts +6 -0
  261. package/dist/types/setup/api.d.ts +23 -0
  262. package/dist/types/setup/directApi.d.ts +24 -0
  263. package/dist/types/setup/index.d.ts +22 -0
  264. package/dist/types/setup/setup.d.ts +44 -0
  265. package/dist/types/setup/wrapAsync.d.ts +4 -0
  266. package/dist/types/system/index.d.ts +10 -0
  267. package/dist/types/system/keyboard.d.ts +50 -0
  268. package/dist/types/system/pointer/buttons.d.ts +23 -0
  269. package/dist/types/system/pointer/device.d.ts +8 -0
  270. package/dist/types/system/pointer/index.d.ts +21 -0
  271. package/dist/types/system/pointer/mouse.d.ts +31 -0
  272. package/dist/types/system/pointer/pointer.d.ts +32 -0
  273. package/dist/types/system/pointer/shared.d.ts +20 -0
  274. package/dist/types/utility/clear.d.ts +2 -0
  275. package/dist/types/utility/index.d.ts +4 -0
  276. package/dist/types/utility/selectOptions.d.ts +3 -0
  277. package/dist/types/utility/type.d.ts +9 -0
  278. package/dist/types/utility/upload.d.ts +5 -0
  279. package/dist/types/utils/click/isClickableInput.d.ts +15 -0
  280. package/dist/types/utils/dataTransfer/Blob.d.ts +3 -0
  281. package/dist/types/utils/dataTransfer/Clipboard.d.ts +11 -0
  282. package/dist/types/utils/dataTransfer/DataTransfer.d.ts +2 -0
  283. package/dist/types/utils/dataTransfer/FileList.d.ts +1 -0
  284. package/dist/types/utils/edit/isContentEditable.d.ts +7 -0
  285. package/dist/types/utils/edit/isEditable.d.ts +24 -0
  286. package/dist/types/utils/edit/maxLength.d.ts +14 -0
  287. package/dist/types/utils/edit/setFiles.d.ts +12 -0
  288. package/dist/types/utils/edit/timeValue.d.ts +4 -0
  289. package/dist/types/utils/focus/cursor.d.ts +9 -0
  290. package/dist/types/utils/focus/getActiveElement.d.ts +2 -0
  291. package/dist/types/utils/focus/getTabDestination.d.ts +1 -0
  292. package/dist/types/utils/focus/isFocusable.d.ts +1 -0
  293. package/dist/types/utils/focus/selection.d.ts +8 -0
  294. package/dist/types/utils/focus/selector.d.ts +1 -0
  295. package/dist/types/utils/index.d.ts +29 -0
  296. package/dist/types/utils/keyDef/readNextDescriptor.d.ts +21 -0
  297. package/dist/types/utils/misc/cloneEvent.d.ts +1 -0
  298. package/dist/types/utils/misc/findClosest.d.ts +1 -0
  299. package/dist/types/utils/misc/getDocumentFromNode.d.ts +1 -0
  300. package/dist/types/utils/misc/getTreeDiff.d.ts +1 -0
  301. package/dist/types/utils/misc/getWindow.d.ts +1 -0
  302. package/dist/types/utils/misc/isDescendantOrSelf.d.ts +1 -0
  303. package/dist/types/utils/misc/isDisabled.d.ts +1 -0
  304. package/dist/types/utils/misc/isElementType.d.ts +5 -0
  305. package/dist/types/utils/misc/isVisible.d.ts +1 -0
  306. package/dist/types/utils/misc/level.d.ts +8 -0
  307. package/dist/types/utils/misc/wait.d.ts +2 -0
  308. package/dist/types/utils/pointer/cssPointerEvents.d.ts +19 -0
  309. package/package.json +131 -0
@@ -0,0 +1,103 @@
1
+ import { dispatchDOMEvent } from '../event/dispatchEvent.js';
2
+ import '../utils/dataTransfer/Clipboard.js';
3
+ import { getActiveElement } from '../utils/focus/getActiveElement.js';
4
+ import '@testing-library/dom';
5
+
6
+ const patched = Symbol('patched focus/blur methods');
7
+ function patchFocus(HTMLElement) {
8
+ if (HTMLElement.prototype[patched]) {
9
+ return;
10
+ }
11
+ // eslint-disable-next-line @typescript-eslint/unbound-method
12
+ const { focus, blur } = HTMLElement.prototype;
13
+ Object.defineProperties(HTMLElement.prototype, {
14
+ focus: {
15
+ configurable: true,
16
+ value: patchedFocus,
17
+ writable: true
18
+ },
19
+ blur: {
20
+ configurable: true,
21
+ value: patchedBlur,
22
+ writable: true
23
+ },
24
+ [patched]: {
25
+ configurable: true,
26
+ get: ()=>({
27
+ focus,
28
+ blur
29
+ })
30
+ }
31
+ });
32
+ let activeCall;
33
+ function patchedFocus(options) {
34
+ if (this.ownerDocument.visibilityState !== 'hidden') {
35
+ return focus.call(this, options);
36
+ }
37
+ const blurred = getActiveTarget(this.ownerDocument);
38
+ if (blurred === this) {
39
+ return;
40
+ }
41
+ const thisCall = Symbol('focus call');
42
+ activeCall = thisCall;
43
+ if (blurred) {
44
+ blur.call(blurred);
45
+ dispatchDOMEvent(blurred, 'blur', {
46
+ relatedTarget: this
47
+ });
48
+ dispatchDOMEvent(blurred, 'focusout', {
49
+ relatedTarget: activeCall === thisCall ? this : null
50
+ });
51
+ }
52
+ if (activeCall === thisCall) {
53
+ focus.call(this, options);
54
+ dispatchDOMEvent(this, 'focus', {
55
+ relatedTarget: blurred
56
+ });
57
+ }
58
+ if (activeCall === thisCall) {
59
+ dispatchDOMEvent(this, 'focusin', {
60
+ relatedTarget: blurred
61
+ });
62
+ }
63
+ }
64
+ function patchedBlur() {
65
+ if (this.ownerDocument.visibilityState !== 'hidden') {
66
+ return blur.call(this);
67
+ }
68
+ const blurred = getActiveTarget(this.ownerDocument);
69
+ if (blurred !== this) {
70
+ return;
71
+ }
72
+ const thisCall = Symbol('blur call');
73
+ activeCall = thisCall;
74
+ blur.call(this);
75
+ dispatchDOMEvent(blurred, 'blur', {
76
+ relatedTarget: null
77
+ });
78
+ dispatchDOMEvent(blurred, 'focusout', {
79
+ relatedTarget: null
80
+ });
81
+ }
82
+ }
83
+ function getActiveTarget(document) {
84
+ const active = getActiveElement(document);
85
+ return (active === null || active === void 0 ? void 0 : active.tagName) === 'BODY' ? null : active;
86
+ }
87
+ function restoreFocus(HTMLElement) {
88
+ if (HTMLElement.prototype[patched]) {
89
+ const { focus, blur } = HTMLElement.prototype[patched];
90
+ Object.defineProperties(HTMLElement.prototype, {
91
+ focus: {
92
+ configurable: true,
93
+ get: ()=>focus
94
+ },
95
+ blur: {
96
+ configurable: true,
97
+ get: ()=>blur
98
+ }
99
+ });
100
+ }
101
+ }
102
+
103
+ export { patchFocus, restoreFocus };
@@ -0,0 +1,56 @@
1
+ import { dispatchDOMEvent } from '../event/dispatchEvent.js';
2
+ import { isElementType } from '../utils/misc/isElementType.js';
3
+ import '../utils/dataTransfer/Clipboard.js';
4
+ import { getInitialValue, clearInitialValue } from './UI.js';
5
+ import '@testing-library/dom';
6
+ import { prepareValueInterceptor, prepareSelectionInterceptor, prepareRangeTextInterceptor } from './interceptor.js';
7
+
8
+ const isPrepared = Symbol('Node prepared with document state workarounds');
9
+ function prepareDocument(document) {
10
+ if (document[isPrepared]) {
11
+ return;
12
+ }
13
+ document.addEventListener('focus', (e)=>{
14
+ const el = e.target;
15
+ prepareElement(el);
16
+ }, {
17
+ capture: true,
18
+ passive: true
19
+ });
20
+ // Our test environment defaults to `document.body` as `activeElement`.
21
+ // In other environments this might be `null` when preparing.
22
+ // istanbul ignore else
23
+ if (document.activeElement) {
24
+ prepareElement(document.activeElement);
25
+ }
26
+ document.addEventListener('blur', (e)=>{
27
+ const el = e.target;
28
+ const initialValue = getInitialValue(el);
29
+ if (initialValue !== undefined) {
30
+ if (el.value !== initialValue) {
31
+ dispatchDOMEvent(el, 'change');
32
+ }
33
+ clearInitialValue(el);
34
+ }
35
+ }, {
36
+ capture: true,
37
+ passive: true
38
+ });
39
+ document[isPrepared] = isPrepared;
40
+ }
41
+ function prepareElement(el) {
42
+ if (el[isPrepared]) {
43
+ return;
44
+ }
45
+ if (isElementType(el, [
46
+ 'input',
47
+ 'textarea'
48
+ ])) {
49
+ prepareValueInterceptor(el);
50
+ prepareSelectionInterceptor(el);
51
+ prepareRangeTextInterceptor(el);
52
+ }
53
+ el[isPrepared] = isPrepared;
54
+ }
55
+
56
+ export { prepareDocument };
@@ -0,0 +1,53 @@
1
+ import '../utils/dataTransfer/Clipboard.js';
2
+ import { getWindow } from '../utils/misc/getWindow.js';
3
+ import { setUIValueClean, hasUISelection, setUISelection } from './UI.js';
4
+
5
+ const TrackChanges = Symbol('Track programmatic changes for React workaround');
6
+ // When the input event happens in the browser, React executes all event handlers
7
+ // and if they change state of a controlled value, nothing happens.
8
+ // But when we trigger the event handlers in test environment with React@17,
9
+ // the changes are rolled back before the state update is applied.
10
+ // This results in a reset cursor.
11
+ // There might be a better way to work around if we figure out
12
+ // why the batched update is executed differently in our test environment.
13
+ function isReact17Element(element) {
14
+ return Object.getOwnPropertyNames(element).some((k)=>k.startsWith('__react')) && getWindow(element).REACT_VERSION === 17;
15
+ }
16
+ function startTrackValue(element) {
17
+ if (!isReact17Element(element)) {
18
+ return;
19
+ }
20
+ element[TrackChanges] = {
21
+ previousValue: String(element.value),
22
+ tracked: []
23
+ };
24
+ }
25
+ function trackOrSetValue(element, v) {
26
+ var _element_TrackChanges_tracked, _element_TrackChanges;
27
+ (_element_TrackChanges = element[TrackChanges]) === null || _element_TrackChanges === void 0 ? void 0 : (_element_TrackChanges_tracked = _element_TrackChanges.tracked) === null || _element_TrackChanges_tracked === void 0 ? void 0 : _element_TrackChanges_tracked.push(v);
28
+ if (!element[TrackChanges]) {
29
+ setUIValueClean(element);
30
+ setUISelection(element, {
31
+ focusOffset: v.length
32
+ });
33
+ }
34
+ }
35
+ function commitValueAfterInput(element, cursorOffset) {
36
+ var _changes_tracked;
37
+ const changes = element[TrackChanges];
38
+ element[TrackChanges] = undefined;
39
+ if (!(changes === null || changes === void 0 ? void 0 : (_changes_tracked = changes.tracked) === null || _changes_tracked === void 0 ? void 0 : _changes_tracked.length)) {
40
+ return;
41
+ }
42
+ const isJustReactStateUpdate = changes.tracked.length === 2 && changes.tracked[0] === changes.previousValue && changes.tracked[1] === element.value;
43
+ if (!isJustReactStateUpdate) {
44
+ setUIValueClean(element);
45
+ }
46
+ if (hasUISelection(element)) {
47
+ setUISelection(element, {
48
+ focusOffset: isJustReactStateUpdate ? cursorOffset : element.value.length
49
+ });
50
+ }
51
+ }
52
+
53
+ export { commitValueAfterInput, startTrackValue, trackOrSetValue };
@@ -0,0 +1,30 @@
1
+ import { isElementType } from '../../utils/misc/isElementType.js';
2
+ import '../../utils/dataTransfer/Clipboard.js';
3
+ import { getWindow } from '../../utils/misc/getWindow.js';
4
+ import { isFocusable } from '../../utils/focus/isFocusable.js';
5
+ import { cloneEvent } from '../../utils/misc/cloneEvent.js';
6
+ import { focusElement, blurElement } from '../focus.js';
7
+ import { behavior } from './registry.js';
8
+
9
+ behavior.click = (event, target, instance)=>{
10
+ const context = target.closest('button,input,label,select,textarea');
11
+ const control = context && isElementType(context, 'label') && context.control;
12
+ if (control && control !== target) {
13
+ return ()=>{
14
+ if (isFocusable(control)) {
15
+ focusElement(control);
16
+ instance.dispatchEvent(control, cloneEvent(event));
17
+ }
18
+ };
19
+ } else if (isElementType(target, 'input', {
20
+ type: 'file'
21
+ })) {
22
+ return ()=>{
23
+ // blur fires when the file selector pops up
24
+ blurElement(target);
25
+ target.dispatchEvent(new (getWindow(target)).Event('fileDialog'));
26
+ // focus fires after the file selector has been closed
27
+ focusElement(target);
28
+ };
29
+ }
30
+ };
@@ -0,0 +1,12 @@
1
+ import '../../utils/dataTransfer/Clipboard.js';
2
+ import { isEditable } from '../../utils/edit/isEditable.js';
3
+ import { input } from '../input.js';
4
+ import { behavior } from './registry.js';
5
+
6
+ behavior.cut = (event, target, instance)=>{
7
+ return ()=>{
8
+ if (isEditable(target)) {
9
+ input(instance, target, '', 'deleteByCut');
10
+ }
11
+ };
12
+ };
@@ -0,0 +1,7 @@
1
+ import './click.js';
2
+ import './cut.js';
3
+ import './keydown.js';
4
+ import './keypress.js';
5
+ import './keyup.js';
6
+ import './paste.js';
7
+ export { behavior } from './registry.js';
@@ -0,0 +1,126 @@
1
+ import { setUISelection, getUIValue } from '../../document/UI.js';
2
+ import { getValueOrTextContent } from '../../document/getValueOrTextContent.js';
3
+ import { isElementType } from '../../utils/misc/isElementType.js';
4
+ import '../../utils/dataTransfer/Clipboard.js';
5
+ import { isContentEditable } from '../../utils/edit/isContentEditable.js';
6
+ import { isEditable } from '../../utils/edit/isEditable.js';
7
+ import { getTabDestination } from '../../utils/focus/getTabDestination.js';
8
+ import { hasOwnSelection } from '../../utils/focus/selection.js';
9
+ import { focusElement } from '../focus.js';
10
+ import { input } from '../input.js';
11
+ import { moveSelection } from '../selection/moveSelection.js';
12
+ import { selectAll } from '../selection/selectAll.js';
13
+ import { setSelectionRange } from '../selection/setSelectionRange.js';
14
+ import { walkRadio } from '../radio.js';
15
+ import { behavior } from './registry.js';
16
+
17
+ behavior.keydown = (event, target, instance)=>{
18
+ var _ref;
19
+ var _keydownBehavior_event_key;
20
+ return (_ref = (_keydownBehavior_event_key = keydownBehavior[event.key]) === null || _keydownBehavior_event_key === void 0 ? void 0 : _keydownBehavior_event_key.call(keydownBehavior, event, target, instance)) !== null && _ref !== void 0 ? _ref : combinationBehavior(event, target, instance);
21
+ };
22
+ const keydownBehavior = {
23
+ ArrowDown: (event, target, instance)=>{
24
+ /* istanbul ignore else */ if (isElementType(target, 'input', {
25
+ type: 'radio'
26
+ })) {
27
+ return ()=>walkRadio(instance, target, 1);
28
+ }
29
+ },
30
+ ArrowLeft: (event, target, instance)=>{
31
+ if (isElementType(target, 'input', {
32
+ type: 'radio'
33
+ })) {
34
+ return ()=>walkRadio(instance, target, -1);
35
+ }
36
+ return ()=>moveSelection(target, -1);
37
+ },
38
+ ArrowRight: (event, target, instance)=>{
39
+ if (isElementType(target, 'input', {
40
+ type: 'radio'
41
+ })) {
42
+ return ()=>walkRadio(instance, target, 1);
43
+ }
44
+ return ()=>moveSelection(target, 1);
45
+ },
46
+ ArrowUp: (event, target, instance)=>{
47
+ /* istanbul ignore else */ if (isElementType(target, 'input', {
48
+ type: 'radio'
49
+ })) {
50
+ return ()=>walkRadio(instance, target, -1);
51
+ }
52
+ },
53
+ Backspace: (event, target, instance)=>{
54
+ if (isEditable(target)) {
55
+ return ()=>{
56
+ input(instance, target, '', 'deleteContentBackward');
57
+ };
58
+ }
59
+ },
60
+ Delete: (event, target, instance)=>{
61
+ if (isEditable(target)) {
62
+ return ()=>{
63
+ input(instance, target, '', 'deleteContentForward');
64
+ };
65
+ }
66
+ },
67
+ End: (event, target)=>{
68
+ if (isElementType(target, [
69
+ 'input',
70
+ 'textarea'
71
+ ]) || isContentEditable(target)) {
72
+ return ()=>{
73
+ var _ref;
74
+ var _getValueOrTextContent;
75
+ const newPos = (_ref = (_getValueOrTextContent = getValueOrTextContent(target)) === null || _getValueOrTextContent === void 0 ? void 0 : _getValueOrTextContent.length) !== null && _ref !== void 0 ? _ref : /* istanbul ignore next */ 0;
76
+ setSelectionRange(target, newPos, newPos);
77
+ };
78
+ }
79
+ },
80
+ Home: (event, target)=>{
81
+ if (isElementType(target, [
82
+ 'input',
83
+ 'textarea'
84
+ ]) || isContentEditable(target)) {
85
+ return ()=>{
86
+ setSelectionRange(target, 0, 0);
87
+ };
88
+ }
89
+ },
90
+ PageDown: (event, target)=>{
91
+ if (isElementType(target, [
92
+ 'input'
93
+ ])) {
94
+ return ()=>{
95
+ const newPos = getUIValue(target).length;
96
+ setSelectionRange(target, newPos, newPos);
97
+ };
98
+ }
99
+ },
100
+ PageUp: (event, target)=>{
101
+ if (isElementType(target, [
102
+ 'input'
103
+ ])) {
104
+ return ()=>{
105
+ setSelectionRange(target, 0, 0);
106
+ };
107
+ }
108
+ },
109
+ Tab: (event, target, instance)=>{
110
+ return ()=>{
111
+ const dest = getTabDestination(target, instance.system.keyboard.modifiers.Shift);
112
+ focusElement(dest);
113
+ if (hasOwnSelection(dest)) {
114
+ setUISelection(dest, {
115
+ anchorOffset: 0,
116
+ focusOffset: dest.value.length
117
+ });
118
+ }
119
+ };
120
+ }
121
+ };
122
+ const combinationBehavior = (event, target, instance)=>{
123
+ if (event.code === 'KeyA' && instance.system.keyboard.modifiers.Control) {
124
+ return ()=>selectAll(target);
125
+ }
126
+ };
@@ -0,0 +1,49 @@
1
+ import { isElementType } from '../../utils/misc/isElementType.js';
2
+ import '../../utils/dataTransfer/Clipboard.js';
3
+ import { isContentEditable } from '../../utils/edit/isContentEditable.js';
4
+ import { isEditable } from '../../utils/edit/isEditable.js';
5
+ import { input } from '../input.js';
6
+ import { behavior } from './registry.js';
7
+
8
+ behavior.keypress = (event, target, instance)=>{
9
+ if (event.key === 'Enter') {
10
+ if (isElementType(target, 'button') || isElementType(target, 'input') && ClickInputOnEnter.includes(target.type) || isElementType(target, 'a') && Boolean(target.href)) {
11
+ return ()=>{
12
+ instance.dispatchUIEvent(target, 'click');
13
+ };
14
+ } else if (isElementType(target, 'input')) {
15
+ const form = target.form;
16
+ const submit = form === null || form === void 0 ? void 0 : form.querySelector('input[type="submit"], button:not([type]), button[type="submit"]');
17
+ if (submit) {
18
+ return ()=>instance.dispatchUIEvent(submit, 'click');
19
+ } else if (form && SubmitSingleInputOnEnter.includes(target.type) && form.querySelectorAll('input').length === 1) {
20
+ return ()=>instance.dispatchUIEvent(form, 'submit');
21
+ } else {
22
+ return;
23
+ }
24
+ }
25
+ }
26
+ if (isEditable(target)) {
27
+ const inputType = event.key === 'Enter' ? isContentEditable(target) && !instance.system.keyboard.modifiers.Shift ? 'insertParagraph' : 'insertLineBreak' : 'insertText';
28
+ const inputData = event.key === 'Enter' ? '\n' : event.key;
29
+ return ()=>input(instance, target, inputData, inputType);
30
+ }
31
+ };
32
+ const ClickInputOnEnter = [
33
+ 'button',
34
+ 'color',
35
+ 'file',
36
+ 'image',
37
+ 'reset',
38
+ 'submit'
39
+ ];
40
+ const SubmitSingleInputOnEnter = [
41
+ 'email',
42
+ 'month',
43
+ 'password',
44
+ 'search',
45
+ 'tel',
46
+ 'text',
47
+ 'url',
48
+ 'week'
49
+ ];
@@ -0,0 +1,15 @@
1
+ import { isClickableInput } from '../../utils/click/isClickableInput.js';
2
+ import '../../utils/dataTransfer/Clipboard.js';
3
+ import { behavior } from './registry.js';
4
+
5
+ behavior.keyup = (event, target, instance)=>{
6
+ var _keyupBehavior_event_key;
7
+ return (_keyupBehavior_event_key = keyupBehavior[event.key]) === null || _keyupBehavior_event_key === void 0 ? void 0 : _keyupBehavior_event_key.call(keyupBehavior, event, target, instance);
8
+ };
9
+ const keyupBehavior = {
10
+ ' ': (event, target, instance)=>{
11
+ if (isClickableInput(target)) {
12
+ return ()=>instance.dispatchUIEvent(target, 'click');
13
+ }
14
+ }
15
+ };
@@ -0,0 +1,16 @@
1
+ import '../../utils/dataTransfer/Clipboard.js';
2
+ import { isEditable } from '../../utils/edit/isEditable.js';
3
+ import { input } from '../input.js';
4
+ import { behavior } from './registry.js';
5
+
6
+ behavior.paste = (event, target, instance)=>{
7
+ if (isEditable(target)) {
8
+ return ()=>{
9
+ var _event_clipboardData;
10
+ const insertData = (_event_clipboardData = event.clipboardData) === null || _event_clipboardData === void 0 ? void 0 : _event_clipboardData.getData('text');
11
+ if (insertData) {
12
+ input(instance, target, insertData, 'insertFromPaste');
13
+ }
14
+ };
15
+ }
16
+ };
@@ -0,0 +1,3 @@
1
+ const behavior = {};
2
+
3
+ export { behavior };
@@ -0,0 +1,191 @@
1
+ import '../utils/dataTransfer/Clipboard.js';
2
+ import { getWindow } from '../utils/misc/getWindow.js';
3
+ import { eventMap } from './eventMap.js';
4
+
5
+ const eventInitializer = {
6
+ ClipboardEvent: [
7
+ initClipboardEvent
8
+ ],
9
+ Event: [],
10
+ FocusEvent: [
11
+ initUIEvent,
12
+ initFocusEvent
13
+ ],
14
+ InputEvent: [
15
+ initUIEvent,
16
+ initInputEvent
17
+ ],
18
+ MouseEvent: [
19
+ initUIEvent,
20
+ initUIEventModifiers,
21
+ initMouseEvent
22
+ ],
23
+ PointerEvent: [
24
+ initUIEvent,
25
+ initUIEventModifiers,
26
+ initMouseEvent,
27
+ initPointerEvent
28
+ ],
29
+ KeyboardEvent: [
30
+ initUIEvent,
31
+ initUIEventModifiers,
32
+ initKeyboardEvent
33
+ ]
34
+ };
35
+ function createEvent(type, target, init) {
36
+ const window = getWindow(target);
37
+ const { EventType, defaultInit } = eventMap[type];
38
+ const event = new (getEventConstructors(window))[EventType](type, defaultInit);
39
+ eventInitializer[EventType].forEach((f)=>f(event, init !== null && init !== void 0 ? init : {}));
40
+ return event;
41
+ }
42
+ /* istanbul ignore next */ function getEventConstructors(window) {
43
+ var _window_Event, _window_AnimationEvent, _window_ClipboardEvent, _window_PopStateEvent, _window_ProgressEvent, _window_TransitionEvent, _window_UIEvent, _window_CompositionEvent, _window_FocusEvent, _window_InputEvent, _window_KeyboardEvent, _window_MouseEvent, _window_DragEvent, _window_PointerEvent, _window_TouchEvent;
44
+ const Event = (_window_Event = window.Event) !== null && _window_Event !== void 0 ? _window_Event : class Event {
45
+ };
46
+ const AnimationEvent = (_window_AnimationEvent = window.AnimationEvent) !== null && _window_AnimationEvent !== void 0 ? _window_AnimationEvent : class AnimationEvent extends Event {
47
+ };
48
+ const ClipboardEvent = (_window_ClipboardEvent = window.ClipboardEvent) !== null && _window_ClipboardEvent !== void 0 ? _window_ClipboardEvent : class ClipboardEvent extends Event {
49
+ };
50
+ const PopStateEvent = (_window_PopStateEvent = window.PopStateEvent) !== null && _window_PopStateEvent !== void 0 ? _window_PopStateEvent : class PopStateEvent extends Event {
51
+ };
52
+ const ProgressEvent = (_window_ProgressEvent = window.ProgressEvent) !== null && _window_ProgressEvent !== void 0 ? _window_ProgressEvent : class ProgressEvent extends Event {
53
+ };
54
+ const TransitionEvent = (_window_TransitionEvent = window.TransitionEvent) !== null && _window_TransitionEvent !== void 0 ? _window_TransitionEvent : class TransitionEvent extends Event {
55
+ };
56
+ const UIEvent = (_window_UIEvent = window.UIEvent) !== null && _window_UIEvent !== void 0 ? _window_UIEvent : class UIEvent extends Event {
57
+ };
58
+ const CompositionEvent = (_window_CompositionEvent = window.CompositionEvent) !== null && _window_CompositionEvent !== void 0 ? _window_CompositionEvent : class CompositionEvent extends UIEvent {
59
+ };
60
+ const FocusEvent = (_window_FocusEvent = window.FocusEvent) !== null && _window_FocusEvent !== void 0 ? _window_FocusEvent : class FocusEvent extends UIEvent {
61
+ };
62
+ const InputEvent = (_window_InputEvent = window.InputEvent) !== null && _window_InputEvent !== void 0 ? _window_InputEvent : class InputEvent extends UIEvent {
63
+ };
64
+ const KeyboardEvent = (_window_KeyboardEvent = window.KeyboardEvent) !== null && _window_KeyboardEvent !== void 0 ? _window_KeyboardEvent : class KeyboardEvent extends UIEvent {
65
+ };
66
+ const MouseEvent = (_window_MouseEvent = window.MouseEvent) !== null && _window_MouseEvent !== void 0 ? _window_MouseEvent : class MouseEvent extends UIEvent {
67
+ };
68
+ const DragEvent = (_window_DragEvent = window.DragEvent) !== null && _window_DragEvent !== void 0 ? _window_DragEvent : class DragEvent extends MouseEvent {
69
+ };
70
+ const PointerEvent = (_window_PointerEvent = window.PointerEvent) !== null && _window_PointerEvent !== void 0 ? _window_PointerEvent : class PointerEvent extends MouseEvent {
71
+ };
72
+ const TouchEvent = (_window_TouchEvent = window.TouchEvent) !== null && _window_TouchEvent !== void 0 ? _window_TouchEvent : class TouchEvent extends UIEvent {
73
+ };
74
+ return {
75
+ Event,
76
+ AnimationEvent,
77
+ ClipboardEvent,
78
+ PopStateEvent,
79
+ ProgressEvent,
80
+ TransitionEvent,
81
+ UIEvent,
82
+ CompositionEvent,
83
+ FocusEvent,
84
+ InputEvent,
85
+ KeyboardEvent,
86
+ MouseEvent,
87
+ DragEvent,
88
+ PointerEvent,
89
+ TouchEvent
90
+ };
91
+ }
92
+ function assignProps(obj, props) {
93
+ for (const [key, value] of Object.entries(props)){
94
+ Object.defineProperty(obj, key, {
95
+ get: ()=>value !== null && value !== void 0 ? value : null
96
+ });
97
+ }
98
+ }
99
+ function sanitizeNumber(n) {
100
+ return Number(n !== null && n !== void 0 ? n : 0);
101
+ }
102
+ function initClipboardEvent(event, { clipboardData }) {
103
+ assignProps(event, {
104
+ clipboardData
105
+ });
106
+ }
107
+ function initFocusEvent(event, { relatedTarget }) {
108
+ assignProps(event, {
109
+ relatedTarget
110
+ });
111
+ }
112
+ function initInputEvent(event, { data, inputType, isComposing }) {
113
+ assignProps(event, {
114
+ data,
115
+ isComposing: Boolean(isComposing),
116
+ inputType: String(inputType)
117
+ });
118
+ }
119
+ function initUIEvent(event, { view, detail }) {
120
+ assignProps(event, {
121
+ view,
122
+ detail: sanitizeNumber(detail !== null && detail !== void 0 ? detail : 0)
123
+ });
124
+ }
125
+ function initUIEventModifiers(event, { altKey, ctrlKey, metaKey, shiftKey, modifierAltGraph, modifierCapsLock, modifierFn, modifierFnLock, modifierNumLock, modifierScrollLock, modifierSymbol, modifierSymbolLock }) {
126
+ assignProps(event, {
127
+ altKey: Boolean(altKey),
128
+ ctrlKey: Boolean(ctrlKey),
129
+ metaKey: Boolean(metaKey),
130
+ shiftKey: Boolean(shiftKey),
131
+ getModifierState (k) {
132
+ return Boolean({
133
+ Alt: altKey,
134
+ AltGraph: modifierAltGraph,
135
+ CapsLock: modifierCapsLock,
136
+ Control: ctrlKey,
137
+ Fn: modifierFn,
138
+ FnLock: modifierFnLock,
139
+ Meta: metaKey,
140
+ NumLock: modifierNumLock,
141
+ ScrollLock: modifierScrollLock,
142
+ Shift: shiftKey,
143
+ Symbol: modifierSymbol,
144
+ SymbolLock: modifierSymbolLock
145
+ }[k]);
146
+ }
147
+ });
148
+ }
149
+ function initKeyboardEvent(event, { key, code, location, repeat, isComposing, charCode }) {
150
+ assignProps(event, {
151
+ key: String(key),
152
+ code: String(code),
153
+ location: sanitizeNumber(location),
154
+ repeat: Boolean(repeat),
155
+ isComposing: Boolean(isComposing),
156
+ charCode
157
+ });
158
+ }
159
+ function initMouseEvent(event, { x, y, screenX, screenY, clientX = x, clientY = y, button, buttons, relatedTarget, offsetX, offsetY, pageX, pageY }) {
160
+ assignProps(event, {
161
+ screenX: sanitizeNumber(screenX),
162
+ screenY: sanitizeNumber(screenY),
163
+ clientX: sanitizeNumber(clientX),
164
+ x: sanitizeNumber(clientX),
165
+ clientY: sanitizeNumber(clientY),
166
+ y: sanitizeNumber(clientY),
167
+ button: sanitizeNumber(button),
168
+ buttons: sanitizeNumber(buttons),
169
+ relatedTarget,
170
+ offsetX: sanitizeNumber(offsetX),
171
+ offsetY: sanitizeNumber(offsetY),
172
+ pageX: sanitizeNumber(pageX),
173
+ pageY: sanitizeNumber(pageY)
174
+ });
175
+ }
176
+ function initPointerEvent(event, { pointerId, width, height, pressure, tangentialPressure, tiltX, tiltY, twist, pointerType, isPrimary, buttons }) {
177
+ assignProps(event, {
178
+ pointerId: sanitizeNumber(pointerId),
179
+ width: sanitizeNumber(width !== null && width !== void 0 ? width : 1),
180
+ height: sanitizeNumber(height !== null && height !== void 0 ? height : 1),
181
+ pressure: sanitizeNumber(pressure !== null && pressure !== void 0 ? pressure : buttons ? 0.5 : 0),
182
+ tangentialPressure: sanitizeNumber(tangentialPressure),
183
+ tiltX: sanitizeNumber(tiltX),
184
+ tiltY: sanitizeNumber(tiltY),
185
+ twist: sanitizeNumber(twist),
186
+ pointerType: String(pointerType),
187
+ isPrimary: Boolean(isPrimary)
188
+ });
189
+ }
190
+
191
+ export { createEvent };