@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,33 @@
1
+ 'use strict';
2
+
3
+ var isElementType = require('./isElementType.js');
4
+
5
+ // This should probably just rely on the :disabled pseudo-class, but JSDOM doesn't implement it properly.
6
+ function isDisabled(element) {
7
+ for(let el = element; el; el = el.parentElement){
8
+ if (isElementType.isElementType(el, [
9
+ 'button',
10
+ 'input',
11
+ 'select',
12
+ 'textarea',
13
+ 'optgroup',
14
+ 'option'
15
+ ])) {
16
+ if (el.hasAttribute('disabled')) {
17
+ return true;
18
+ }
19
+ } else if (isElementType.isElementType(el, 'fieldset')) {
20
+ var _el_querySelector;
21
+ if (el.hasAttribute('disabled') && !((_el_querySelector = el.querySelector(':scope > legend')) === null || _el_querySelector === void 0 ? void 0 : _el_querySelector.contains(element))) {
22
+ return true;
23
+ }
24
+ } else if (el.tagName.includes('-')) {
25
+ if (el.constructor.formAssociated && el.hasAttribute('disabled')) {
26
+ return true;
27
+ }
28
+ }
29
+ }
30
+ return false;
31
+ }
32
+
33
+ exports.isDisabled = isDisabled;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ function isElementType(element, tag, props) {
4
+ if (element.namespaceURI && element.namespaceURI !== 'http://www.w3.org/1999/xhtml') {
5
+ return false;
6
+ }
7
+ tag = Array.isArray(tag) ? tag : [
8
+ tag
9
+ ];
10
+ // tagName is uppercase in HTMLDocument and lowercase in XMLDocument
11
+ if (!tag.includes(element.tagName.toLowerCase())) {
12
+ return false;
13
+ }
14
+ if (props) {
15
+ return Object.entries(props).every(([k, v])=>element[k] === v);
16
+ }
17
+ return true;
18
+ }
19
+
20
+ exports.isElementType = isElementType;
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var getWindow = require('./getWindow.js');
4
+
5
+ function isVisible(element) {
6
+ const window = getWindow.getWindow(element);
7
+ for(let el = element; el === null || el === void 0 ? void 0 : el.ownerDocument; el = el.parentElement){
8
+ const { display, visibility } = window.getComputedStyle(el);
9
+ if (display === 'none') {
10
+ return false;
11
+ }
12
+ if (visibility === 'hidden') {
13
+ return false;
14
+ }
15
+ }
16
+ return true;
17
+ }
18
+
19
+ exports.isVisible = isVisible;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var ApiLevel = /*#__PURE__*/ function(ApiLevel) {
4
+ ApiLevel[ApiLevel["Trigger"] = 2] = "Trigger";
5
+ ApiLevel[ApiLevel["Call"] = 1] = "Call";
6
+ return ApiLevel;
7
+ }({});
8
+ function setLevelRef(instance, level) {
9
+ instance.levelRefs[level] = {};
10
+ }
11
+ function getLevelRef(instance, level) {
12
+ return instance.levelRefs[level];
13
+ }
14
+
15
+ exports.ApiLevel = ApiLevel;
16
+ exports.getLevelRef = getLevelRef;
17
+ exports.setLevelRef = setLevelRef;
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ function wait(config) {
4
+ const delay = config.delay;
5
+ if (typeof delay !== 'number') {
6
+ return;
7
+ }
8
+ return Promise.all([
9
+ new Promise((resolve)=>globalThis.setTimeout(()=>resolve(), delay)),
10
+ config.advanceTimers(delay)
11
+ ]);
12
+ }
13
+
14
+ exports.wait = wait;
@@ -0,0 +1,102 @@
1
+ 'use strict';
2
+
3
+ var options = require('../../options.js');
4
+ var getWindow = require('../misc/getWindow.js');
5
+ var isElementType = require('../misc/isElementType.js');
6
+ var level = require('../misc/level.js');
7
+
8
+ function hasPointerEvents(instance, element) {
9
+ var _checkPointerEvents;
10
+ return ((_checkPointerEvents = checkPointerEvents(instance, element)) === null || _checkPointerEvents === void 0 ? void 0 : _checkPointerEvents.pointerEvents) !== 'none';
11
+ }
12
+ function closestPointerEventsDeclaration(element) {
13
+ const window = getWindow.getWindow(element);
14
+ for(let el = element, tree = []; el === null || el === void 0 ? void 0 : el.ownerDocument; el = el.parentElement){
15
+ tree.push(el);
16
+ const pointerEvents = window.getComputedStyle(el).pointerEvents;
17
+ if (pointerEvents && ![
18
+ 'inherit',
19
+ 'unset'
20
+ ].includes(pointerEvents)) {
21
+ return {
22
+ pointerEvents,
23
+ tree
24
+ };
25
+ }
26
+ }
27
+ return undefined;
28
+ }
29
+ const PointerEventsCheck = Symbol('Last check for pointer-events');
30
+ function checkPointerEvents(instance, element) {
31
+ const lastCheck = element[PointerEventsCheck];
32
+ const needsCheck = instance.config.pointerEventsCheck !== options.PointerEventsCheckLevel.Never && (!lastCheck || hasBitFlag(instance.config.pointerEventsCheck, options.PointerEventsCheckLevel.EachApiCall) && lastCheck[level.ApiLevel.Call] !== level.getLevelRef(instance, level.ApiLevel.Call) || hasBitFlag(instance.config.pointerEventsCheck, options.PointerEventsCheckLevel.EachTrigger) && lastCheck[level.ApiLevel.Trigger] !== level.getLevelRef(instance, level.ApiLevel.Trigger));
33
+ if (!needsCheck) {
34
+ return lastCheck === null || lastCheck === void 0 ? void 0 : lastCheck.result;
35
+ }
36
+ const declaration = closestPointerEventsDeclaration(element);
37
+ element[PointerEventsCheck] = {
38
+ [level.ApiLevel.Call]: level.getLevelRef(instance, level.ApiLevel.Call),
39
+ [level.ApiLevel.Trigger]: level.getLevelRef(instance, level.ApiLevel.Trigger),
40
+ result: declaration
41
+ };
42
+ return declaration;
43
+ }
44
+ function assertPointerEvents(instance, element) {
45
+ const declaration = checkPointerEvents(instance, element);
46
+ if ((declaration === null || declaration === void 0 ? void 0 : declaration.pointerEvents) === 'none') {
47
+ throw new Error([
48
+ `Unable to perform pointer interaction as the element ${declaration.tree.length > 1 ? 'inherits' : 'has'} \`pointer-events: none\`:`,
49
+ '',
50
+ printTree(declaration.tree)
51
+ ].join('\n'));
52
+ }
53
+ }
54
+ function printTree(tree) {
55
+ return tree.reverse().map((el, i)=>[
56
+ ''.padEnd(i),
57
+ el.tagName,
58
+ el.id && `#${el.id}`,
59
+ el.hasAttribute('data-testid') && `(testId=${el.getAttribute('data-testid')})`,
60
+ getLabelDescr(el),
61
+ tree.length > 1 && i === 0 && ' <-- This element declared `pointer-events: none`',
62
+ tree.length > 1 && i === tree.length - 1 && ' <-- Asserted pointer events here'
63
+ ].filter(Boolean).join('')).join('\n');
64
+ }
65
+ function getLabelDescr(element) {
66
+ var _element_labels;
67
+ let label;
68
+ if (element.hasAttribute('aria-label')) {
69
+ label = element.getAttribute('aria-label');
70
+ } else if (element.hasAttribute('aria-labelledby')) {
71
+ var _element_ownerDocument_getElementById_textContent, _element_ownerDocument_getElementById;
72
+ label = (_element_ownerDocument_getElementById = element.ownerDocument.getElementById(element.getAttribute('aria-labelledby'))) === null || _element_ownerDocument_getElementById === void 0 ? void 0 : (_element_ownerDocument_getElementById_textContent = _element_ownerDocument_getElementById.textContent) === null || _element_ownerDocument_getElementById_textContent === void 0 ? void 0 : _element_ownerDocument_getElementById_textContent.trim();
73
+ } else if (isElementType.isElementType(element, [
74
+ 'button',
75
+ 'input',
76
+ 'meter',
77
+ 'output',
78
+ 'progress',
79
+ 'select',
80
+ 'textarea'
81
+ ]) && ((_element_labels = element.labels) === null || _element_labels === void 0 ? void 0 : _element_labels.length)) {
82
+ label = Array.from(element.labels).map((el)=>{
83
+ var _el_textContent;
84
+ return (_el_textContent = el.textContent) === null || _el_textContent === void 0 ? void 0 : _el_textContent.trim();
85
+ }).join('|');
86
+ } else if (isElementType.isElementType(element, 'button')) {
87
+ var _element_textContent;
88
+ label = (_element_textContent = element.textContent) === null || _element_textContent === void 0 ? void 0 : _element_textContent.trim();
89
+ }
90
+ label = label === null || label === void 0 ? void 0 : label.replace(/\n/g, ' ');
91
+ if (Number(label === null || label === void 0 ? void 0 : label.length) > 30) {
92
+ label = `${label === null || label === void 0 ? void 0 : label.substring(0, 29)}…`;
93
+ }
94
+ return label ? `(label=${label})` : '';
95
+ }
96
+ // With the eslint rule and prettier the bitwise operation isn't nice to read
97
+ function hasBitFlag(conf, flag) {
98
+ return (conf & flag) > 0;
99
+ }
100
+
101
+ exports.assertPointerEvents = assertPointerEvents;
102
+ exports.hasPointerEvents = hasPointerEvents;
@@ -0,0 +1,20 @@
1
+ import { writeDataTransferToClipboard } from '../utils/dataTransfer/Clipboard.js';
2
+ import { copySelection } from '../document/copySelection.js';
3
+
4
+ async function copy() {
5
+ var _doc_activeElement;
6
+ const doc = this.config.document;
7
+ const target = (_doc_activeElement = doc.activeElement) !== null && _doc_activeElement !== void 0 ? _doc_activeElement : /* istanbul ignore next */ doc.body;
8
+ const clipboardData = copySelection(target);
9
+ if (clipboardData.items.length === 0) {
10
+ return;
11
+ }
12
+ if (this.dispatchUIEvent(target, 'copy', {
13
+ clipboardData
14
+ }) && this.config.writeToClipboard) {
15
+ await writeDataTransferToClipboard(doc, clipboardData);
16
+ }
17
+ return clipboardData;
18
+ }
19
+
20
+ export { copy };
@@ -0,0 +1,20 @@
1
+ import { writeDataTransferToClipboard } from '../utils/dataTransfer/Clipboard.js';
2
+ import { copySelection } from '../document/copySelection.js';
3
+
4
+ async function cut() {
5
+ var _doc_activeElement;
6
+ const doc = this.config.document;
7
+ const target = (_doc_activeElement = doc.activeElement) !== null && _doc_activeElement !== void 0 ? _doc_activeElement : /* istanbul ignore next */ doc.body;
8
+ const clipboardData = copySelection(target);
9
+ if (clipboardData.items.length === 0) {
10
+ return;
11
+ }
12
+ if (this.dispatchUIEvent(target, 'cut', {
13
+ clipboardData
14
+ }) && this.config.writeToClipboard) {
15
+ await writeDataTransferToClipboard(target.ownerDocument, clipboardData);
16
+ }
17
+ return clipboardData;
18
+ }
19
+
20
+ export { cut };
@@ -0,0 +1,3 @@
1
+ export { copy } from './copy.js';
2
+ export { cut } from './cut.js';
3
+ export { paste } from './paste.js';
@@ -0,0 +1,22 @@
1
+ import { createDataTransfer } from '../utils/dataTransfer/DataTransfer.js';
2
+ import { readDataTransferFromClipboard } from '../utils/dataTransfer/Clipboard.js';
3
+ import { getWindow } from '../utils/misc/getWindow.js';
4
+
5
+ async function paste(clipboardData) {
6
+ var _doc_activeElement, _ref;
7
+ const doc = this.config.document;
8
+ const target = (_doc_activeElement = doc.activeElement) !== null && _doc_activeElement !== void 0 ? _doc_activeElement : /* istanbul ignore next */ doc.body;
9
+ const dataTransfer = (_ref = typeof clipboardData === 'string' ? getClipboardDataFromString(doc, clipboardData) : clipboardData) !== null && _ref !== void 0 ? _ref : await readDataTransferFromClipboard(doc).catch(()=>{
10
+ throw new Error('`userEvent.paste()` without `clipboardData` requires the `ClipboardAPI` to be available.');
11
+ });
12
+ this.dispatchUIEvent(target, 'paste', {
13
+ clipboardData: dataTransfer
14
+ });
15
+ }
16
+ function getClipboardDataFromString(doc, text) {
17
+ const dt = createDataTransfer(getWindow(doc));
18
+ dt.setData('text', text);
19
+ return dt;
20
+ }
21
+
22
+ export { paste };
@@ -0,0 +1,31 @@
1
+ async function click(element) {
2
+ const pointerIn = [];
3
+ if (!this.config.skipHover) {
4
+ pointerIn.push({
5
+ target: element
6
+ });
7
+ }
8
+ pointerIn.push({
9
+ keys: '[MouseLeft]',
10
+ target: element
11
+ });
12
+ return this.pointer(pointerIn);
13
+ }
14
+ async function dblClick(element) {
15
+ return this.pointer([
16
+ {
17
+ target: element
18
+ },
19
+ '[MouseLeft][MouseLeft]'
20
+ ]);
21
+ }
22
+ async function tripleClick(element) {
23
+ return this.pointer([
24
+ {
25
+ target: element
26
+ },
27
+ '[MouseLeft][MouseLeft][MouseLeft]'
28
+ ]);
29
+ }
30
+
31
+ export { click, dblClick, tripleClick };
@@ -0,0 +1,16 @@
1
+ import '../utils/dataTransfer/Clipboard.js';
2
+ import { assertPointerEvents } from '../utils/pointer/cssPointerEvents.js';
3
+
4
+ async function hover(element) {
5
+ return this.pointer({
6
+ target: element
7
+ });
8
+ }
9
+ async function unhover(element) {
10
+ assertPointerEvents(this, this.system.pointer.getMouseTarget(this));
11
+ return this.pointer({
12
+ target: element.ownerDocument.body
13
+ });
14
+ }
15
+
16
+ export { hover, unhover };
@@ -0,0 +1,3 @@
1
+ export { click, dblClick, tripleClick } from './click.js';
2
+ export { hover, unhover } from './hover.js';
3
+ export { tab } from './tab.js';
@@ -0,0 +1,5 @@
1
+ async function tab({ shift } = {}) {
2
+ return this.keyboard(shift === true ? '{Shift>}{Tab}{/Shift}' : shift === false ? '[/ShiftLeft][/ShiftRight]{Tab}' : '{Tab}');
3
+ }
4
+
5
+ export { tab };
@@ -0,0 +1,77 @@
1
+ const UIValue = Symbol('Displayed value in UI');
2
+ const UISelection = Symbol('Displayed selection in UI');
3
+ const InitialValue = Symbol('Initial value to compare on blur');
4
+ function isUIValue(value) {
5
+ return typeof value === 'object' && UIValue in value;
6
+ }
7
+ function isUISelectionStart(start) {
8
+ return !!start && typeof start === 'object' && UISelection in start;
9
+ }
10
+ function setUIValue(element, value) {
11
+ if (element[InitialValue] === undefined) {
12
+ element[InitialValue] = element.value;
13
+ }
14
+ element[UIValue] = value;
15
+ element.value = Object.assign(new String(value), {
16
+ [UIValue]: true
17
+ });
18
+ }
19
+ function getUIValue(element) {
20
+ return element[UIValue] === undefined ? element.value : String(element[UIValue]);
21
+ }
22
+ /** Flag the IDL value as clean. This does not change the value. */ function setUIValueClean(element) {
23
+ element[UIValue] = undefined;
24
+ }
25
+ function clearInitialValue(element) {
26
+ element[InitialValue] = undefined;
27
+ }
28
+ function getInitialValue(element) {
29
+ return element[InitialValue];
30
+ }
31
+ function setUISelectionRaw(element, selection) {
32
+ element[UISelection] = selection;
33
+ }
34
+ function setUISelection(element, { focusOffset: focusOffsetParam, anchorOffset: anchorOffsetParam = focusOffsetParam }, mode = 'replace') {
35
+ const valueLength = getUIValue(element).length;
36
+ const sanitizeOffset = (o)=>Math.max(0, Math.min(valueLength, o));
37
+ const anchorOffset = mode === 'replace' || element[UISelection] === undefined ? sanitizeOffset(anchorOffsetParam) : element[UISelection].anchorOffset;
38
+ const focusOffset = sanitizeOffset(focusOffsetParam);
39
+ const startOffset = Math.min(anchorOffset, focusOffset);
40
+ const endOffset = Math.max(anchorOffset, focusOffset);
41
+ element[UISelection] = {
42
+ anchorOffset,
43
+ focusOffset
44
+ };
45
+ if (element.selectionStart === startOffset && element.selectionEnd === endOffset) {
46
+ return;
47
+ }
48
+ const startObj = Object.assign(new Number(startOffset), {
49
+ [UISelection]: true
50
+ });
51
+ try {
52
+ element.setSelectionRange(startObj, endOffset);
53
+ } catch {
54
+ // DOMException for invalid state is expected when calling this
55
+ // on an element without support for setSelectionRange
56
+ }
57
+ }
58
+ function getUISelection(element) {
59
+ var _element_UISelection, _element_selectionStart, _element_selectionEnd;
60
+ const sel = (_element_UISelection = element[UISelection]) !== null && _element_UISelection !== void 0 ? _element_UISelection : {
61
+ anchorOffset: (_element_selectionStart = element.selectionStart) !== null && _element_selectionStart !== void 0 ? _element_selectionStart : 0,
62
+ focusOffset: (_element_selectionEnd = element.selectionEnd) !== null && _element_selectionEnd !== void 0 ? _element_selectionEnd : 0
63
+ };
64
+ return {
65
+ ...sel,
66
+ startOffset: Math.min(sel.anchorOffset, sel.focusOffset),
67
+ endOffset: Math.max(sel.anchorOffset, sel.focusOffset)
68
+ };
69
+ }
70
+ function hasUISelection(element) {
71
+ return !!element[UISelection];
72
+ }
73
+ /** Flag the IDL selection as clean. This does not change the selection. */ function setUISelectionClean(element) {
74
+ element[UISelection] = undefined;
75
+ }
76
+
77
+ export { clearInitialValue, getInitialValue, getUISelection, getUIValue, hasUISelection, isUISelectionStart, isUIValue, setUISelection, setUISelectionClean, setUISelectionRaw, setUIValue, setUIValueClean };
@@ -0,0 +1,27 @@
1
+ import { createDataTransfer } from '../utils/dataTransfer/DataTransfer.js';
2
+ import '../utils/dataTransfer/Clipboard.js';
3
+ import { getWindow } from '../utils/misc/getWindow.js';
4
+ import { hasOwnSelection } from '../utils/focus/selection.js';
5
+ import { getUISelection, getUIValue } from './UI.js';
6
+
7
+ function copySelection(target) {
8
+ const data = hasOwnSelection(target) ? {
9
+ 'text/plain': readSelectedValueFromInput(target)
10
+ } : {
11
+ 'text/plain': String(target.ownerDocument.getSelection())
12
+ };
13
+ const dt = createDataTransfer(getWindow(target));
14
+ for(const type in data){
15
+ if (data[type]) {
16
+ dt.setData(type, data[type]);
17
+ }
18
+ }
19
+ return dt;
20
+ }
21
+ function readSelectedValueFromInput(target) {
22
+ const sel = getUISelection(target);
23
+ const val = getUIValue(target);
24
+ return val.substring(sel.startOffset, sel.endOffset);
25
+ }
26
+
27
+ export { copySelection };
@@ -0,0 +1,16 @@
1
+ import '../utils/dataTransfer/Clipboard.js';
2
+ import { isContentEditable } from '../utils/edit/isContentEditable.js';
3
+ import { getUIValue } from './UI.js';
4
+
5
+ function getValueOrTextContent(element) {
6
+ // istanbul ignore if
7
+ if (!element) {
8
+ return null;
9
+ }
10
+ if (isContentEditable(element)) {
11
+ return element.textContent;
12
+ }
13
+ return getUIValue(element);
14
+ }
15
+
16
+ export { getValueOrTextContent };
@@ -0,0 +1,4 @@
1
+ export { clearInitialValue, getUISelection, getUIValue, setUISelection, setUIValue } from './UI.js';
2
+ export { getValueOrTextContent } from './getValueOrTextContent.js';
3
+ export { copySelection } from './copySelection.js';
4
+ export { commitValueAfterInput } from './trackValue.js';
@@ -0,0 +1,99 @@
1
+ import { isElementType } from '../utils/misc/isElementType.js';
2
+ import '../utils/dataTransfer/Clipboard.js';
3
+ import { startTrackValue, trackOrSetValue } from './trackValue.js';
4
+ import { isUIValue, setUISelectionClean, isUISelectionStart, setUISelectionRaw, getUIValue, setUIValueClean } from './UI.js';
5
+
6
+ const Interceptor = Symbol('Interceptor for programmatical calls');
7
+ function prepareInterceptor(element, propName, interceptorImpl) {
8
+ const prototypeDescriptor = Object.getOwnPropertyDescriptor(element.constructor.prototype, propName);
9
+ const objectDescriptor = Object.getOwnPropertyDescriptor(element, propName);
10
+ const target = (prototypeDescriptor === null || prototypeDescriptor === void 0 ? void 0 : prototypeDescriptor.set) ? 'set' : 'value';
11
+ /* istanbul ignore if */ if (typeof (prototypeDescriptor === null || prototypeDescriptor === void 0 ? void 0 : prototypeDescriptor[target]) !== 'function' || prototypeDescriptor[target][Interceptor]) {
12
+ throw new Error(`Element ${element.tagName} does not implement "${String(propName)}".`);
13
+ }
14
+ function intercept(...args) {
15
+ const { applyNative = false, realArgs, then } = interceptorImpl.call(this, ...args);
16
+ const realFunc = (!applyNative && objectDescriptor || prototypeDescriptor)[target];
17
+ if (target === 'set') {
18
+ realFunc.call(this, realArgs);
19
+ } else {
20
+ realFunc.call(this, ...realArgs);
21
+ }
22
+ then === null || then === void 0 ? void 0 : then();
23
+ }
24
+ intercept[Interceptor] = Interceptor;
25
+ Object.defineProperty(element, propName, {
26
+ ...objectDescriptor !== null && objectDescriptor !== void 0 ? objectDescriptor : prototypeDescriptor,
27
+ [target]: intercept
28
+ });
29
+ }
30
+ function prepareValueInterceptor(element) {
31
+ prepareInterceptor(element, 'value', function interceptorImpl(v) {
32
+ const isUI = isUIValue(v);
33
+ if (isUI) {
34
+ startTrackValue(this);
35
+ }
36
+ return {
37
+ applyNative: !!isUI,
38
+ realArgs: sanitizeValue(this, v),
39
+ then: isUI ? undefined : ()=>trackOrSetValue(this, String(v))
40
+ };
41
+ });
42
+ }
43
+ function sanitizeValue(element, v) {
44
+ // Workaround for JSDOM
45
+ if (isElementType(element, 'input', {
46
+ type: 'number'
47
+ }) && String(v) !== '' && !Number.isNaN(Number(v))) {
48
+ // Setting value to "1." results in `null` in JSDOM
49
+ return String(Number(v));
50
+ }
51
+ return String(v);
52
+ }
53
+ function prepareSelectionInterceptor(element) {
54
+ prepareInterceptor(element, 'setSelectionRange', function interceptorImpl(start, ...others) {
55
+ const isUI = isUISelectionStart(start);
56
+ return {
57
+ applyNative: !!isUI,
58
+ realArgs: [
59
+ Number(start),
60
+ ...others
61
+ ],
62
+ then: ()=>isUI ? undefined : setUISelectionClean(element)
63
+ };
64
+ });
65
+ prepareInterceptor(element, 'selectionStart', function interceptorImpl(v) {
66
+ return {
67
+ realArgs: v,
68
+ then: ()=>setUISelectionClean(element)
69
+ };
70
+ });
71
+ prepareInterceptor(element, 'selectionEnd', function interceptorImpl(v) {
72
+ return {
73
+ realArgs: v,
74
+ then: ()=>setUISelectionClean(element)
75
+ };
76
+ });
77
+ prepareInterceptor(element, 'select', function interceptorImpl() {
78
+ return {
79
+ realArgs: [],
80
+ then: ()=>setUISelectionRaw(element, {
81
+ anchorOffset: 0,
82
+ focusOffset: getUIValue(element).length
83
+ })
84
+ };
85
+ });
86
+ }
87
+ function prepareRangeTextInterceptor(element) {
88
+ prepareInterceptor(element, 'setRangeText', function interceptorImpl(...realArgs) {
89
+ return {
90
+ realArgs,
91
+ then: ()=>{
92
+ setUIValueClean(element);
93
+ setUISelectionClean(element);
94
+ }
95
+ };
96
+ });
97
+ }
98
+
99
+ export { prepareInterceptor, prepareRangeTextInterceptor, prepareSelectionInterceptor, prepareValueInterceptor };