@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,57 @@
1
+ 'use strict';
2
+
3
+ require('../utils/dataTransfer/Clipboard.js');
4
+ var getWindow = require('../utils/misc/getWindow.js');
5
+ var UI = require('./UI.js');
6
+
7
+ const TrackChanges = Symbol('Track programmatic changes for React workaround');
8
+ // When the input event happens in the browser, React executes all event handlers
9
+ // and if they change state of a controlled value, nothing happens.
10
+ // But when we trigger the event handlers in test environment with React@17,
11
+ // the changes are rolled back before the state update is applied.
12
+ // This results in a reset cursor.
13
+ // There might be a better way to work around if we figure out
14
+ // why the batched update is executed differently in our test environment.
15
+ function isReact17Element(element) {
16
+ return Object.getOwnPropertyNames(element).some((k)=>k.startsWith('__react')) && getWindow.getWindow(element).REACT_VERSION === 17;
17
+ }
18
+ function startTrackValue(element) {
19
+ if (!isReact17Element(element)) {
20
+ return;
21
+ }
22
+ element[TrackChanges] = {
23
+ previousValue: String(element.value),
24
+ tracked: []
25
+ };
26
+ }
27
+ function trackOrSetValue(element, v) {
28
+ var _element_TrackChanges_tracked, _element_TrackChanges;
29
+ (_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);
30
+ if (!element[TrackChanges]) {
31
+ UI.setUIValueClean(element);
32
+ UI.setUISelection(element, {
33
+ focusOffset: v.length
34
+ });
35
+ }
36
+ }
37
+ function commitValueAfterInput(element, cursorOffset) {
38
+ var _changes_tracked;
39
+ const changes = element[TrackChanges];
40
+ element[TrackChanges] = undefined;
41
+ if (!(changes === null || changes === void 0 ? void 0 : (_changes_tracked = changes.tracked) === null || _changes_tracked === void 0 ? void 0 : _changes_tracked.length)) {
42
+ return;
43
+ }
44
+ const isJustReactStateUpdate = changes.tracked.length === 2 && changes.tracked[0] === changes.previousValue && changes.tracked[1] === element.value;
45
+ if (!isJustReactStateUpdate) {
46
+ UI.setUIValueClean(element);
47
+ }
48
+ if (UI.hasUISelection(element)) {
49
+ UI.setUISelection(element, {
50
+ focusOffset: isJustReactStateUpdate ? cursorOffset : element.value.length
51
+ });
52
+ }
53
+ }
54
+
55
+ exports.commitValueAfterInput = commitValueAfterInput;
56
+ exports.startTrackValue = startTrackValue;
57
+ exports.trackOrSetValue = trackOrSetValue;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ var isElementType = require('../../utils/misc/isElementType.js');
4
+ require('../../utils/dataTransfer/Clipboard.js');
5
+ var getWindow = require('../../utils/misc/getWindow.js');
6
+ var isFocusable = require('../../utils/focus/isFocusable.js');
7
+ var cloneEvent = require('../../utils/misc/cloneEvent.js');
8
+ var focus = require('../focus.js');
9
+ var registry = require('./registry.js');
10
+
11
+ registry.behavior.click = (event, target, instance)=>{
12
+ const context = target.closest('button,input,label,select,textarea');
13
+ const control = context && isElementType.isElementType(context, 'label') && context.control;
14
+ if (control && control !== target) {
15
+ return ()=>{
16
+ if (isFocusable.isFocusable(control)) {
17
+ focus.focusElement(control);
18
+ instance.dispatchEvent(control, cloneEvent.cloneEvent(event));
19
+ }
20
+ };
21
+ } else if (isElementType.isElementType(target, 'input', {
22
+ type: 'file'
23
+ })) {
24
+ return ()=>{
25
+ // blur fires when the file selector pops up
26
+ focus.blurElement(target);
27
+ target.dispatchEvent(new (getWindow.getWindow(target)).Event('fileDialog'));
28
+ // focus fires after the file selector has been closed
29
+ focus.focusElement(target);
30
+ };
31
+ }
32
+ };
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ require('../../utils/dataTransfer/Clipboard.js');
4
+ var isEditable = require('../../utils/edit/isEditable.js');
5
+ var input = require('../input.js');
6
+ var registry = require('./registry.js');
7
+
8
+ registry.behavior.cut = (event, target, instance)=>{
9
+ return ()=>{
10
+ if (isEditable.isEditable(target)) {
11
+ input.input(instance, target, '', 'deleteByCut');
12
+ }
13
+ };
14
+ };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ require('./click.js');
4
+ require('./cut.js');
5
+ require('./keydown.js');
6
+ require('./keypress.js');
7
+ require('./keyup.js');
8
+ require('./paste.js');
9
+ var registry = require('./registry.js');
10
+
11
+
12
+
13
+ exports.behavior = registry.behavior;
@@ -0,0 +1,128 @@
1
+ 'use strict';
2
+
3
+ var UI = require('../../document/UI.js');
4
+ var getValueOrTextContent = require('../../document/getValueOrTextContent.js');
5
+ var isElementType = require('../../utils/misc/isElementType.js');
6
+ require('../../utils/dataTransfer/Clipboard.js');
7
+ var isContentEditable = require('../../utils/edit/isContentEditable.js');
8
+ var isEditable = require('../../utils/edit/isEditable.js');
9
+ var getTabDestination = require('../../utils/focus/getTabDestination.js');
10
+ var selection = require('../../utils/focus/selection.js');
11
+ var focus = require('../focus.js');
12
+ var input = require('../input.js');
13
+ var moveSelection = require('../selection/moveSelection.js');
14
+ var selectAll = require('../selection/selectAll.js');
15
+ var setSelectionRange = require('../selection/setSelectionRange.js');
16
+ var radio = require('../radio.js');
17
+ var registry = require('./registry.js');
18
+
19
+ registry.behavior.keydown = (event, target, instance)=>{
20
+ var _ref;
21
+ var _keydownBehavior_event_key;
22
+ 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);
23
+ };
24
+ const keydownBehavior = {
25
+ ArrowDown: (event, target, instance)=>{
26
+ /* istanbul ignore else */ if (isElementType.isElementType(target, 'input', {
27
+ type: 'radio'
28
+ })) {
29
+ return ()=>radio.walkRadio(instance, target, 1);
30
+ }
31
+ },
32
+ ArrowLeft: (event, target, instance)=>{
33
+ if (isElementType.isElementType(target, 'input', {
34
+ type: 'radio'
35
+ })) {
36
+ return ()=>radio.walkRadio(instance, target, -1);
37
+ }
38
+ return ()=>moveSelection.moveSelection(target, -1);
39
+ },
40
+ ArrowRight: (event, target, instance)=>{
41
+ if (isElementType.isElementType(target, 'input', {
42
+ type: 'radio'
43
+ })) {
44
+ return ()=>radio.walkRadio(instance, target, 1);
45
+ }
46
+ return ()=>moveSelection.moveSelection(target, 1);
47
+ },
48
+ ArrowUp: (event, target, instance)=>{
49
+ /* istanbul ignore else */ if (isElementType.isElementType(target, 'input', {
50
+ type: 'radio'
51
+ })) {
52
+ return ()=>radio.walkRadio(instance, target, -1);
53
+ }
54
+ },
55
+ Backspace: (event, target, instance)=>{
56
+ if (isEditable.isEditable(target)) {
57
+ return ()=>{
58
+ input.input(instance, target, '', 'deleteContentBackward');
59
+ };
60
+ }
61
+ },
62
+ Delete: (event, target, instance)=>{
63
+ if (isEditable.isEditable(target)) {
64
+ return ()=>{
65
+ input.input(instance, target, '', 'deleteContentForward');
66
+ };
67
+ }
68
+ },
69
+ End: (event, target)=>{
70
+ if (isElementType.isElementType(target, [
71
+ 'input',
72
+ 'textarea'
73
+ ]) || isContentEditable.isContentEditable(target)) {
74
+ return ()=>{
75
+ var _ref;
76
+ var _getValueOrTextContent;
77
+ const newPos = (_ref = (_getValueOrTextContent = getValueOrTextContent.getValueOrTextContent(target)) === null || _getValueOrTextContent === void 0 ? void 0 : _getValueOrTextContent.length) !== null && _ref !== void 0 ? _ref : /* istanbul ignore next */ 0;
78
+ setSelectionRange.setSelectionRange(target, newPos, newPos);
79
+ };
80
+ }
81
+ },
82
+ Home: (event, target)=>{
83
+ if (isElementType.isElementType(target, [
84
+ 'input',
85
+ 'textarea'
86
+ ]) || isContentEditable.isContentEditable(target)) {
87
+ return ()=>{
88
+ setSelectionRange.setSelectionRange(target, 0, 0);
89
+ };
90
+ }
91
+ },
92
+ PageDown: (event, target)=>{
93
+ if (isElementType.isElementType(target, [
94
+ 'input'
95
+ ])) {
96
+ return ()=>{
97
+ const newPos = UI.getUIValue(target).length;
98
+ setSelectionRange.setSelectionRange(target, newPos, newPos);
99
+ };
100
+ }
101
+ },
102
+ PageUp: (event, target)=>{
103
+ if (isElementType.isElementType(target, [
104
+ 'input'
105
+ ])) {
106
+ return ()=>{
107
+ setSelectionRange.setSelectionRange(target, 0, 0);
108
+ };
109
+ }
110
+ },
111
+ Tab: (event, target, instance)=>{
112
+ return ()=>{
113
+ const dest = getTabDestination.getTabDestination(target, instance.system.keyboard.modifiers.Shift);
114
+ focus.focusElement(dest);
115
+ if (selection.hasOwnSelection(dest)) {
116
+ UI.setUISelection(dest, {
117
+ anchorOffset: 0,
118
+ focusOffset: dest.value.length
119
+ });
120
+ }
121
+ };
122
+ }
123
+ };
124
+ const combinationBehavior = (event, target, instance)=>{
125
+ if (event.code === 'KeyA' && instance.system.keyboard.modifiers.Control) {
126
+ return ()=>selectAll.selectAll(target);
127
+ }
128
+ };
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var isElementType = require('../../utils/misc/isElementType.js');
4
+ require('../../utils/dataTransfer/Clipboard.js');
5
+ var isContentEditable = require('../../utils/edit/isContentEditable.js');
6
+ var isEditable = require('../../utils/edit/isEditable.js');
7
+ var input = require('../input.js');
8
+ var registry = require('./registry.js');
9
+
10
+ registry.behavior.keypress = (event, target, instance)=>{
11
+ if (event.key === 'Enter') {
12
+ if (isElementType.isElementType(target, 'button') || isElementType.isElementType(target, 'input') && ClickInputOnEnter.includes(target.type) || isElementType.isElementType(target, 'a') && Boolean(target.href)) {
13
+ return ()=>{
14
+ instance.dispatchUIEvent(target, 'click');
15
+ };
16
+ } else if (isElementType.isElementType(target, 'input')) {
17
+ const form = target.form;
18
+ const submit = form === null || form === void 0 ? void 0 : form.querySelector('input[type="submit"], button:not([type]), button[type="submit"]');
19
+ if (submit) {
20
+ return ()=>instance.dispatchUIEvent(submit, 'click');
21
+ } else if (form && SubmitSingleInputOnEnter.includes(target.type) && form.querySelectorAll('input').length === 1) {
22
+ return ()=>instance.dispatchUIEvent(form, 'submit');
23
+ } else {
24
+ return;
25
+ }
26
+ }
27
+ }
28
+ if (isEditable.isEditable(target)) {
29
+ const inputType = event.key === 'Enter' ? isContentEditable.isContentEditable(target) && !instance.system.keyboard.modifiers.Shift ? 'insertParagraph' : 'insertLineBreak' : 'insertText';
30
+ const inputData = event.key === 'Enter' ? '\n' : event.key;
31
+ return ()=>input.input(instance, target, inputData, inputType);
32
+ }
33
+ };
34
+ const ClickInputOnEnter = [
35
+ 'button',
36
+ 'color',
37
+ 'file',
38
+ 'image',
39
+ 'reset',
40
+ 'submit'
41
+ ];
42
+ const SubmitSingleInputOnEnter = [
43
+ 'email',
44
+ 'month',
45
+ 'password',
46
+ 'search',
47
+ 'tel',
48
+ 'text',
49
+ 'url',
50
+ 'week'
51
+ ];
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var isClickableInput = require('../../utils/click/isClickableInput.js');
4
+ require('../../utils/dataTransfer/Clipboard.js');
5
+ var registry = require('./registry.js');
6
+
7
+ registry.behavior.keyup = (event, target, instance)=>{
8
+ var _keyupBehavior_event_key;
9
+ return (_keyupBehavior_event_key = keyupBehavior[event.key]) === null || _keyupBehavior_event_key === void 0 ? void 0 : _keyupBehavior_event_key.call(keyupBehavior, event, target, instance);
10
+ };
11
+ const keyupBehavior = {
12
+ ' ': (event, target, instance)=>{
13
+ if (isClickableInput.isClickableInput(target)) {
14
+ return ()=>instance.dispatchUIEvent(target, 'click');
15
+ }
16
+ }
17
+ };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ require('../../utils/dataTransfer/Clipboard.js');
4
+ var isEditable = require('../../utils/edit/isEditable.js');
5
+ var input = require('../input.js');
6
+ var registry = require('./registry.js');
7
+
8
+ registry.behavior.paste = (event, target, instance)=>{
9
+ if (isEditable.isEditable(target)) {
10
+ return ()=>{
11
+ var _event_clipboardData;
12
+ const insertData = (_event_clipboardData = event.clipboardData) === null || _event_clipboardData === void 0 ? void 0 : _event_clipboardData.getData('text');
13
+ if (insertData) {
14
+ input.input(instance, target, insertData, 'insertFromPaste');
15
+ }
16
+ };
17
+ }
18
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ const behavior = {};
4
+
5
+ exports.behavior = behavior;
@@ -0,0 +1,193 @@
1
+ 'use strict';
2
+
3
+ require('../utils/dataTransfer/Clipboard.js');
4
+ var getWindow = require('../utils/misc/getWindow.js');
5
+ var eventMap = require('./eventMap.js');
6
+
7
+ const eventInitializer = {
8
+ ClipboardEvent: [
9
+ initClipboardEvent
10
+ ],
11
+ Event: [],
12
+ FocusEvent: [
13
+ initUIEvent,
14
+ initFocusEvent
15
+ ],
16
+ InputEvent: [
17
+ initUIEvent,
18
+ initInputEvent
19
+ ],
20
+ MouseEvent: [
21
+ initUIEvent,
22
+ initUIEventModifiers,
23
+ initMouseEvent
24
+ ],
25
+ PointerEvent: [
26
+ initUIEvent,
27
+ initUIEventModifiers,
28
+ initMouseEvent,
29
+ initPointerEvent
30
+ ],
31
+ KeyboardEvent: [
32
+ initUIEvent,
33
+ initUIEventModifiers,
34
+ initKeyboardEvent
35
+ ]
36
+ };
37
+ function createEvent(type, target, init) {
38
+ const window = getWindow.getWindow(target);
39
+ const { EventType, defaultInit } = eventMap.eventMap[type];
40
+ const event = new (getEventConstructors(window))[EventType](type, defaultInit);
41
+ eventInitializer[EventType].forEach((f)=>f(event, init !== null && init !== void 0 ? init : {}));
42
+ return event;
43
+ }
44
+ /* istanbul ignore next */ function getEventConstructors(window) {
45
+ 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;
46
+ const Event = (_window_Event = window.Event) !== null && _window_Event !== void 0 ? _window_Event : class Event {
47
+ };
48
+ const AnimationEvent = (_window_AnimationEvent = window.AnimationEvent) !== null && _window_AnimationEvent !== void 0 ? _window_AnimationEvent : class AnimationEvent extends Event {
49
+ };
50
+ const ClipboardEvent = (_window_ClipboardEvent = window.ClipboardEvent) !== null && _window_ClipboardEvent !== void 0 ? _window_ClipboardEvent : class ClipboardEvent extends Event {
51
+ };
52
+ const PopStateEvent = (_window_PopStateEvent = window.PopStateEvent) !== null && _window_PopStateEvent !== void 0 ? _window_PopStateEvent : class PopStateEvent extends Event {
53
+ };
54
+ const ProgressEvent = (_window_ProgressEvent = window.ProgressEvent) !== null && _window_ProgressEvent !== void 0 ? _window_ProgressEvent : class ProgressEvent extends Event {
55
+ };
56
+ const TransitionEvent = (_window_TransitionEvent = window.TransitionEvent) !== null && _window_TransitionEvent !== void 0 ? _window_TransitionEvent : class TransitionEvent extends Event {
57
+ };
58
+ const UIEvent = (_window_UIEvent = window.UIEvent) !== null && _window_UIEvent !== void 0 ? _window_UIEvent : class UIEvent extends Event {
59
+ };
60
+ const CompositionEvent = (_window_CompositionEvent = window.CompositionEvent) !== null && _window_CompositionEvent !== void 0 ? _window_CompositionEvent : class CompositionEvent extends UIEvent {
61
+ };
62
+ const FocusEvent = (_window_FocusEvent = window.FocusEvent) !== null && _window_FocusEvent !== void 0 ? _window_FocusEvent : class FocusEvent extends UIEvent {
63
+ };
64
+ const InputEvent = (_window_InputEvent = window.InputEvent) !== null && _window_InputEvent !== void 0 ? _window_InputEvent : class InputEvent extends UIEvent {
65
+ };
66
+ const KeyboardEvent = (_window_KeyboardEvent = window.KeyboardEvent) !== null && _window_KeyboardEvent !== void 0 ? _window_KeyboardEvent : class KeyboardEvent extends UIEvent {
67
+ };
68
+ const MouseEvent = (_window_MouseEvent = window.MouseEvent) !== null && _window_MouseEvent !== void 0 ? _window_MouseEvent : class MouseEvent extends UIEvent {
69
+ };
70
+ const DragEvent = (_window_DragEvent = window.DragEvent) !== null && _window_DragEvent !== void 0 ? _window_DragEvent : class DragEvent extends MouseEvent {
71
+ };
72
+ const PointerEvent = (_window_PointerEvent = window.PointerEvent) !== null && _window_PointerEvent !== void 0 ? _window_PointerEvent : class PointerEvent extends MouseEvent {
73
+ };
74
+ const TouchEvent = (_window_TouchEvent = window.TouchEvent) !== null && _window_TouchEvent !== void 0 ? _window_TouchEvent : class TouchEvent extends UIEvent {
75
+ };
76
+ return {
77
+ Event,
78
+ AnimationEvent,
79
+ ClipboardEvent,
80
+ PopStateEvent,
81
+ ProgressEvent,
82
+ TransitionEvent,
83
+ UIEvent,
84
+ CompositionEvent,
85
+ FocusEvent,
86
+ InputEvent,
87
+ KeyboardEvent,
88
+ MouseEvent,
89
+ DragEvent,
90
+ PointerEvent,
91
+ TouchEvent
92
+ };
93
+ }
94
+ function assignProps(obj, props) {
95
+ for (const [key, value] of Object.entries(props)){
96
+ Object.defineProperty(obj, key, {
97
+ get: ()=>value !== null && value !== void 0 ? value : null
98
+ });
99
+ }
100
+ }
101
+ function sanitizeNumber(n) {
102
+ return Number(n !== null && n !== void 0 ? n : 0);
103
+ }
104
+ function initClipboardEvent(event, { clipboardData }) {
105
+ assignProps(event, {
106
+ clipboardData
107
+ });
108
+ }
109
+ function initFocusEvent(event, { relatedTarget }) {
110
+ assignProps(event, {
111
+ relatedTarget
112
+ });
113
+ }
114
+ function initInputEvent(event, { data, inputType, isComposing }) {
115
+ assignProps(event, {
116
+ data,
117
+ isComposing: Boolean(isComposing),
118
+ inputType: String(inputType)
119
+ });
120
+ }
121
+ function initUIEvent(event, { view, detail }) {
122
+ assignProps(event, {
123
+ view,
124
+ detail: sanitizeNumber(detail !== null && detail !== void 0 ? detail : 0)
125
+ });
126
+ }
127
+ function initUIEventModifiers(event, { altKey, ctrlKey, metaKey, shiftKey, modifierAltGraph, modifierCapsLock, modifierFn, modifierFnLock, modifierNumLock, modifierScrollLock, modifierSymbol, modifierSymbolLock }) {
128
+ assignProps(event, {
129
+ altKey: Boolean(altKey),
130
+ ctrlKey: Boolean(ctrlKey),
131
+ metaKey: Boolean(metaKey),
132
+ shiftKey: Boolean(shiftKey),
133
+ getModifierState (k) {
134
+ return Boolean({
135
+ Alt: altKey,
136
+ AltGraph: modifierAltGraph,
137
+ CapsLock: modifierCapsLock,
138
+ Control: ctrlKey,
139
+ Fn: modifierFn,
140
+ FnLock: modifierFnLock,
141
+ Meta: metaKey,
142
+ NumLock: modifierNumLock,
143
+ ScrollLock: modifierScrollLock,
144
+ Shift: shiftKey,
145
+ Symbol: modifierSymbol,
146
+ SymbolLock: modifierSymbolLock
147
+ }[k]);
148
+ }
149
+ });
150
+ }
151
+ function initKeyboardEvent(event, { key, code, location, repeat, isComposing, charCode }) {
152
+ assignProps(event, {
153
+ key: String(key),
154
+ code: String(code),
155
+ location: sanitizeNumber(location),
156
+ repeat: Boolean(repeat),
157
+ isComposing: Boolean(isComposing),
158
+ charCode
159
+ });
160
+ }
161
+ function initMouseEvent(event, { x, y, screenX, screenY, clientX = x, clientY = y, button, buttons, relatedTarget, offsetX, offsetY, pageX, pageY }) {
162
+ assignProps(event, {
163
+ screenX: sanitizeNumber(screenX),
164
+ screenY: sanitizeNumber(screenY),
165
+ clientX: sanitizeNumber(clientX),
166
+ x: sanitizeNumber(clientX),
167
+ clientY: sanitizeNumber(clientY),
168
+ y: sanitizeNumber(clientY),
169
+ button: sanitizeNumber(button),
170
+ buttons: sanitizeNumber(buttons),
171
+ relatedTarget,
172
+ offsetX: sanitizeNumber(offsetX),
173
+ offsetY: sanitizeNumber(offsetY),
174
+ pageX: sanitizeNumber(pageX),
175
+ pageY: sanitizeNumber(pageY)
176
+ });
177
+ }
178
+ function initPointerEvent(event, { pointerId, width, height, pressure, tangentialPressure, tiltX, tiltY, twist, pointerType, isPrimary, buttons }) {
179
+ assignProps(event, {
180
+ pointerId: sanitizeNumber(pointerId),
181
+ width: sanitizeNumber(width !== null && width !== void 0 ? width : 1),
182
+ height: sanitizeNumber(height !== null && height !== void 0 ? height : 1),
183
+ pressure: sanitizeNumber(pressure !== null && pressure !== void 0 ? pressure : buttons ? 0.5 : 0),
184
+ tangentialPressure: sanitizeNumber(tangentialPressure),
185
+ tiltX: sanitizeNumber(tiltX),
186
+ tiltY: sanitizeNumber(tiltY),
187
+ twist: sanitizeNumber(twist),
188
+ pointerType: String(pointerType),
189
+ isPrimary: Boolean(isPrimary)
190
+ });
191
+ }
192
+
193
+ exports.createEvent = createEvent;
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ require('./behavior/click.js');
4
+ require('./behavior/cut.js');
5
+ require('./behavior/keydown.js');
6
+ require('./behavior/keypress.js');
7
+ require('./behavior/keyup.js');
8
+ require('./behavior/paste.js');
9
+ var registry = require('./behavior/registry.js');
10
+ var wrapEvent = require('./wrapEvent.js');
11
+ var eventMap = require('./eventMap.js');
12
+ var createEvent = require('./createEvent.js');
13
+
14
+ function dispatchUIEvent(target, type, init, preventDefault = false) {
15
+ if (eventMap.isMouseEvent(type) || eventMap.isKeyboardEvent(type)) {
16
+ init = {
17
+ ...init,
18
+ ...this.system.getUIEventModifiers()
19
+ };
20
+ }
21
+ const event = createEvent.createEvent(type, target, init);
22
+ return dispatchEvent.call(this, target, event, preventDefault);
23
+ }
24
+ function dispatchEvent(target, event, preventDefault = false) {
25
+ var _behavior_type;
26
+ const type = event.type;
27
+ const behaviorImplementation = preventDefault ? ()=>{} : (_behavior_type = registry.behavior[type]) === null || _behavior_type === void 0 ? void 0 : _behavior_type.call(registry.behavior, event, target, this);
28
+ if (behaviorImplementation) {
29
+ event.preventDefault();
30
+ let defaultPrevented = false;
31
+ Object.defineProperty(event, 'defaultPrevented', {
32
+ get: ()=>defaultPrevented
33
+ });
34
+ Object.defineProperty(event, 'preventDefault', {
35
+ value: ()=>{
36
+ defaultPrevented = event.cancelable;
37
+ }
38
+ });
39
+ wrapEvent.wrapEvent(()=>target.dispatchEvent(event));
40
+ if (!defaultPrevented) {
41
+ behaviorImplementation();
42
+ }
43
+ return !defaultPrevented;
44
+ }
45
+ return wrapEvent.wrapEvent(()=>target.dispatchEvent(event));
46
+ }
47
+ function dispatchDOMEvent(target, type, init) {
48
+ const event = createEvent.createEvent(type, target, init);
49
+ wrapEvent.wrapEvent(()=>target.dispatchEvent(event));
50
+ }
51
+
52
+ exports.dispatchDOMEvent = dispatchDOMEvent;
53
+ exports.dispatchEvent = dispatchEvent;
54
+ exports.dispatchUIEvent = dispatchUIEvent;