@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,50 @@
1
+ import './behavior/click.js';
2
+ import './behavior/cut.js';
3
+ import './behavior/keydown.js';
4
+ import './behavior/keypress.js';
5
+ import './behavior/keyup.js';
6
+ import './behavior/paste.js';
7
+ import { behavior } from './behavior/registry.js';
8
+ import { wrapEvent } from './wrapEvent.js';
9
+ import { isMouseEvent, isKeyboardEvent } from './eventMap.js';
10
+ import { createEvent } from './createEvent.js';
11
+
12
+ function dispatchUIEvent(target, type, init, preventDefault = false) {
13
+ if (isMouseEvent(type) || isKeyboardEvent(type)) {
14
+ init = {
15
+ ...init,
16
+ ...this.system.getUIEventModifiers()
17
+ };
18
+ }
19
+ const event = createEvent(type, target, init);
20
+ return dispatchEvent.call(this, target, event, preventDefault);
21
+ }
22
+ function dispatchEvent(target, event, preventDefault = false) {
23
+ var _behavior_type;
24
+ const type = event.type;
25
+ const behaviorImplementation = preventDefault ? ()=>{} : (_behavior_type = behavior[type]) === null || _behavior_type === void 0 ? void 0 : _behavior_type.call(behavior, event, target, this);
26
+ if (behaviorImplementation) {
27
+ event.preventDefault();
28
+ let defaultPrevented = false;
29
+ Object.defineProperty(event, 'defaultPrevented', {
30
+ get: ()=>defaultPrevented
31
+ });
32
+ Object.defineProperty(event, 'preventDefault', {
33
+ value: ()=>{
34
+ defaultPrevented = event.cancelable;
35
+ }
36
+ });
37
+ wrapEvent(()=>target.dispatchEvent(event));
38
+ if (!defaultPrevented) {
39
+ behaviorImplementation();
40
+ }
41
+ return !defaultPrevented;
42
+ }
43
+ return wrapEvent(()=>target.dispatchEvent(event));
44
+ }
45
+ function dispatchDOMEvent(target, type, init) {
46
+ const event = createEvent(type, target, init);
47
+ wrapEvent(()=>target.dispatchEvent(event));
48
+ }
49
+
50
+ export { dispatchDOMEvent, dispatchEvent, dispatchUIEvent };
@@ -0,0 +1,277 @@
1
+ const eventMap = {
2
+ auxclick: {
3
+ EventType: 'PointerEvent',
4
+ defaultInit: {
5
+ bubbles: true,
6
+ cancelable: true,
7
+ composed: true
8
+ }
9
+ },
10
+ beforeinput: {
11
+ EventType: 'InputEvent',
12
+ defaultInit: {
13
+ bubbles: true,
14
+ cancelable: true,
15
+ composed: true
16
+ }
17
+ },
18
+ blur: {
19
+ EventType: 'FocusEvent',
20
+ defaultInit: {
21
+ bubbles: false,
22
+ cancelable: false,
23
+ composed: true
24
+ }
25
+ },
26
+ click: {
27
+ EventType: 'PointerEvent',
28
+ defaultInit: {
29
+ bubbles: true,
30
+ cancelable: true,
31
+ composed: true
32
+ }
33
+ },
34
+ contextmenu: {
35
+ EventType: 'PointerEvent',
36
+ defaultInit: {
37
+ bubbles: true,
38
+ cancelable: true,
39
+ composed: true
40
+ }
41
+ },
42
+ copy: {
43
+ EventType: 'ClipboardEvent',
44
+ defaultInit: {
45
+ bubbles: true,
46
+ cancelable: true,
47
+ composed: true
48
+ }
49
+ },
50
+ change: {
51
+ EventType: 'Event',
52
+ defaultInit: {
53
+ bubbles: true,
54
+ cancelable: false
55
+ }
56
+ },
57
+ cut: {
58
+ EventType: 'ClipboardEvent',
59
+ defaultInit: {
60
+ bubbles: true,
61
+ cancelable: true,
62
+ composed: true
63
+ }
64
+ },
65
+ dblclick: {
66
+ EventType: 'MouseEvent',
67
+ defaultInit: {
68
+ bubbles: true,
69
+ cancelable: true,
70
+ composed: true
71
+ }
72
+ },
73
+ focus: {
74
+ EventType: 'FocusEvent',
75
+ defaultInit: {
76
+ bubbles: false,
77
+ cancelable: false,
78
+ composed: true
79
+ }
80
+ },
81
+ focusin: {
82
+ EventType: 'FocusEvent',
83
+ defaultInit: {
84
+ bubbles: true,
85
+ cancelable: false,
86
+ composed: true
87
+ }
88
+ },
89
+ focusout: {
90
+ EventType: 'FocusEvent',
91
+ defaultInit: {
92
+ bubbles: true,
93
+ cancelable: false,
94
+ composed: true
95
+ }
96
+ },
97
+ keydown: {
98
+ EventType: 'KeyboardEvent',
99
+ defaultInit: {
100
+ bubbles: true,
101
+ cancelable: true,
102
+ composed: true
103
+ }
104
+ },
105
+ keypress: {
106
+ EventType: 'KeyboardEvent',
107
+ defaultInit: {
108
+ bubbles: true,
109
+ cancelable: true,
110
+ composed: true
111
+ }
112
+ },
113
+ keyup: {
114
+ EventType: 'KeyboardEvent',
115
+ defaultInit: {
116
+ bubbles: true,
117
+ cancelable: true,
118
+ composed: true
119
+ }
120
+ },
121
+ paste: {
122
+ EventType: 'ClipboardEvent',
123
+ defaultInit: {
124
+ bubbles: true,
125
+ cancelable: true,
126
+ composed: true
127
+ }
128
+ },
129
+ input: {
130
+ EventType: 'InputEvent',
131
+ defaultInit: {
132
+ bubbles: true,
133
+ cancelable: false,
134
+ composed: true
135
+ }
136
+ },
137
+ mousedown: {
138
+ EventType: 'MouseEvent',
139
+ defaultInit: {
140
+ bubbles: true,
141
+ cancelable: true,
142
+ composed: true
143
+ }
144
+ },
145
+ mouseenter: {
146
+ EventType: 'MouseEvent',
147
+ defaultInit: {
148
+ bubbles: false,
149
+ cancelable: false,
150
+ composed: true
151
+ }
152
+ },
153
+ mouseleave: {
154
+ EventType: 'MouseEvent',
155
+ defaultInit: {
156
+ bubbles: false,
157
+ cancelable: false,
158
+ composed: true
159
+ }
160
+ },
161
+ mousemove: {
162
+ EventType: 'MouseEvent',
163
+ defaultInit: {
164
+ bubbles: true,
165
+ cancelable: true,
166
+ composed: true
167
+ }
168
+ },
169
+ mouseout: {
170
+ EventType: 'MouseEvent',
171
+ defaultInit: {
172
+ bubbles: true,
173
+ cancelable: true,
174
+ composed: true
175
+ }
176
+ },
177
+ mouseover: {
178
+ EventType: 'MouseEvent',
179
+ defaultInit: {
180
+ bubbles: true,
181
+ cancelable: true,
182
+ composed: true
183
+ }
184
+ },
185
+ mouseup: {
186
+ EventType: 'MouseEvent',
187
+ defaultInit: {
188
+ bubbles: true,
189
+ cancelable: true,
190
+ composed: true
191
+ }
192
+ },
193
+ pointerover: {
194
+ EventType: 'PointerEvent',
195
+ defaultInit: {
196
+ bubbles: true,
197
+ cancelable: true,
198
+ composed: true
199
+ }
200
+ },
201
+ pointerenter: {
202
+ EventType: 'PointerEvent',
203
+ defaultInit: {
204
+ bubbles: false,
205
+ cancelable: false
206
+ }
207
+ },
208
+ pointerdown: {
209
+ EventType: 'PointerEvent',
210
+ defaultInit: {
211
+ bubbles: true,
212
+ cancelable: true,
213
+ composed: true
214
+ }
215
+ },
216
+ pointermove: {
217
+ EventType: 'PointerEvent',
218
+ defaultInit: {
219
+ bubbles: true,
220
+ cancelable: true,
221
+ composed: true
222
+ }
223
+ },
224
+ pointerup: {
225
+ EventType: 'PointerEvent',
226
+ defaultInit: {
227
+ bubbles: true,
228
+ cancelable: true,
229
+ composed: true
230
+ }
231
+ },
232
+ pointercancel: {
233
+ EventType: 'PointerEvent',
234
+ defaultInit: {
235
+ bubbles: true,
236
+ cancelable: false,
237
+ composed: true
238
+ }
239
+ },
240
+ pointerout: {
241
+ EventType: 'PointerEvent',
242
+ defaultInit: {
243
+ bubbles: true,
244
+ cancelable: true,
245
+ composed: true
246
+ }
247
+ },
248
+ pointerleave: {
249
+ EventType: 'PointerEvent',
250
+ defaultInit: {
251
+ bubbles: false,
252
+ cancelable: false
253
+ }
254
+ },
255
+ submit: {
256
+ EventType: 'Event',
257
+ defaultInit: {
258
+ bubbles: true,
259
+ cancelable: true
260
+ }
261
+ }
262
+ };
263
+ function getEventClass(type) {
264
+ return eventMap[type].EventType;
265
+ }
266
+ const mouseEvents = [
267
+ 'MouseEvent',
268
+ 'PointerEvent'
269
+ ];
270
+ function isMouseEvent(type) {
271
+ return mouseEvents.includes(getEventClass(type));
272
+ }
273
+ function isKeyboardEvent(type) {
274
+ return getEventClass(type) === 'KeyboardEvent';
275
+ }
276
+
277
+ export { eventMap, isKeyboardEvent, isMouseEvent };
@@ -0,0 +1,31 @@
1
+ import '../utils/dataTransfer/Clipboard.js';
2
+ import { getActiveElement } from '../utils/focus/getActiveElement.js';
3
+ import { isFocusable } from '../utils/focus/isFocusable.js';
4
+ import { findClosest } from '../utils/misc/findClosest.js';
5
+ import { updateSelectionOnFocus } from './selection/updateSelectionOnFocus.js';
6
+ import { wrapEvent } from './wrapEvent.js';
7
+
8
+ // Browsers do not dispatch FocusEvent if the document does not have focus.
9
+ // TODO: simulate FocusEvent in browsers
10
+ /**
11
+ * Focus closest focusable element.
12
+ */ function focusElement(element) {
13
+ const target = findClosest(element, isFocusable);
14
+ const activeElement = getActiveElement(element.ownerDocument);
15
+ if ((target !== null && target !== void 0 ? target : element.ownerDocument.body) === activeElement) {
16
+ return;
17
+ } else if (target) {
18
+ wrapEvent(()=>target.focus());
19
+ } else {
20
+ wrapEvent(()=>activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur());
21
+ }
22
+ updateSelectionOnFocus(target !== null && target !== void 0 ? target : element.ownerDocument.body);
23
+ }
24
+ function blurElement(element) {
25
+ if (!isFocusable(element)) return;
26
+ const wasActive = getActiveElement(element.ownerDocument) === element;
27
+ if (!wasActive) return;
28
+ wrapEvent(()=>element.blur());
29
+ }
30
+
31
+ export { blurElement, focusElement };
@@ -0,0 +1,7 @@
1
+ export { dispatchDOMEvent, dispatchEvent, dispatchUIEvent } from './dispatchEvent.js';
2
+ export { blurElement, focusElement } from './focus.js';
3
+ export { input } from './input.js';
4
+ import '../utils/dataTransfer/Clipboard.js';
5
+ export { setSelectionPerMouseDown } from './selection/setSelectionPerMouse.js';
6
+ export { modifySelectionPerMouseMove } from './selection/modifySelectionPerMouse.js';
7
+ export { isAllSelected, selectAll } from './selection/selectAll.js';
@@ -0,0 +1,156 @@
1
+ import { setUIValue, clearInitialValue, getUIValue } from '../document/UI.js';
2
+ import { isElementType } from '../utils/misc/isElementType.js';
3
+ import '../utils/dataTransfer/Clipboard.js';
4
+ import { isValidDateOrTimeValue, buildTimeValue } from '../utils/edit/timeValue.js';
5
+ import { supportsMaxLength, getMaxLength } from '../utils/edit/maxLength.js';
6
+ import { getNextCursorPosition } from '../utils/focus/cursor.js';
7
+ import { commitValueAfterInput } from '../document/trackValue.js';
8
+ import { getInputRange } from './selection/getInputRange.js';
9
+ import { setSelection } from './selection/setSelection.js';
10
+
11
+ function isDateOrTime(element) {
12
+ return isElementType(element, 'input') && [
13
+ 'date',
14
+ 'time'
15
+ ].includes(element.type);
16
+ }
17
+ function input(instance, element, data, inputType = 'insertText') {
18
+ const inputRange = getInputRange(element);
19
+ /* istanbul ignore if */ if (!inputRange) {
20
+ return;
21
+ }
22
+ // There is no `beforeinput` event on `date` and `time` input
23
+ if (!isDateOrTime(element)) {
24
+ const unprevented = instance.dispatchUIEvent(element, 'beforeinput', {
25
+ inputType,
26
+ data
27
+ });
28
+ if (!unprevented) {
29
+ return;
30
+ }
31
+ }
32
+ if ('startContainer' in inputRange) {
33
+ editContenteditable(instance, element, inputRange, data, inputType);
34
+ } else {
35
+ editInputElement(instance, element, inputRange, data, inputType);
36
+ }
37
+ }
38
+ function editContenteditable(instance, element, inputRange, data, inputType) {
39
+ let del = false;
40
+ if (!inputRange.collapsed) {
41
+ del = true;
42
+ inputRange.deleteContents();
43
+ } else if ([
44
+ 'deleteContentBackward',
45
+ 'deleteContentForward'
46
+ ].includes(inputType)) {
47
+ const nextPosition = getNextCursorPosition(inputRange.startContainer, inputRange.startOffset, inputType === 'deleteContentBackward' ? -1 : 1, inputType);
48
+ if (nextPosition) {
49
+ del = true;
50
+ const delRange = inputRange.cloneRange();
51
+ if (delRange.comparePoint(nextPosition.node, nextPosition.offset) < 0) {
52
+ delRange.setStart(nextPosition.node, nextPosition.offset);
53
+ } else {
54
+ delRange.setEnd(nextPosition.node, nextPosition.offset);
55
+ }
56
+ delRange.deleteContents();
57
+ }
58
+ }
59
+ if (data) {
60
+ if (inputRange.endContainer.nodeType === 3) {
61
+ const offset = inputRange.endOffset;
62
+ inputRange.endContainer.insertData(offset, data);
63
+ inputRange.setStart(inputRange.endContainer, offset + data.length);
64
+ inputRange.setEnd(inputRange.endContainer, offset + data.length);
65
+ } else {
66
+ const text = element.ownerDocument.createTextNode(data);
67
+ inputRange.insertNode(text);
68
+ inputRange.setStart(text, data.length);
69
+ inputRange.setEnd(text, data.length);
70
+ }
71
+ }
72
+ if (del || data) {
73
+ instance.dispatchUIEvent(element, 'input', {
74
+ inputType
75
+ });
76
+ }
77
+ }
78
+ function editInputElement(instance, element, inputRange, data, inputType) {
79
+ let dataToInsert = data;
80
+ if (supportsMaxLength(element)) {
81
+ const maxLength = getMaxLength(element);
82
+ if (maxLength !== undefined && data.length > 0) {
83
+ const selectionLength = inputRange.endOffset - inputRange.startOffset;
84
+ const spaceUntilMaxLength = maxLength - element.value.length + selectionLength;
85
+ if (spaceUntilMaxLength > 0) {
86
+ dataToInsert = data.substring(0, spaceUntilMaxLength);
87
+ } else {
88
+ return;
89
+ }
90
+ }
91
+ }
92
+ const { newValue, newOffset, oldValue } = calculateNewValue(dataToInsert, element, inputRange, inputType);
93
+ if (newValue === oldValue && newOffset === inputRange.startOffset && newOffset === inputRange.endOffset) {
94
+ return;
95
+ }
96
+ if (isElementType(element, 'input', {
97
+ type: 'number'
98
+ }) && !isValidNumberInput(newValue)) {
99
+ return;
100
+ }
101
+ setUIValue(element, newValue);
102
+ setSelection({
103
+ focusNode: element,
104
+ anchorOffset: newOffset,
105
+ focusOffset: newOffset
106
+ });
107
+ if (isDateOrTime(element)) {
108
+ if (isValidDateOrTimeValue(element, newValue)) {
109
+ commitInput(instance, element, newOffset, {});
110
+ instance.dispatchUIEvent(element, 'change');
111
+ clearInitialValue(element);
112
+ }
113
+ } else {
114
+ commitInput(instance, element, newOffset, {
115
+ data,
116
+ inputType
117
+ });
118
+ }
119
+ }
120
+ function calculateNewValue(inputData, node, { startOffset, endOffset }, inputType) {
121
+ const value = getUIValue(node);
122
+ const prologEnd = Math.max(0, startOffset === endOffset && inputType === 'deleteContentBackward' ? startOffset - 1 : startOffset);
123
+ const prolog = value.substring(0, prologEnd);
124
+ const epilogStart = Math.min(value.length, startOffset === endOffset && inputType === 'deleteContentForward' ? startOffset + 1 : endOffset);
125
+ const epilog = value.substring(epilogStart, value.length);
126
+ let newValue = `${prolog}${inputData}${epilog}`;
127
+ let newOffset = prologEnd + inputData.length;
128
+ if (isElementType(node, 'input', {
129
+ type: 'time'
130
+ })) {
131
+ const builtValue = buildTimeValue(newValue);
132
+ if (builtValue !== '' && isValidDateOrTimeValue(node, builtValue)) {
133
+ newValue = builtValue;
134
+ newOffset = builtValue.length;
135
+ }
136
+ }
137
+ return {
138
+ oldValue: value,
139
+ newValue,
140
+ newOffset
141
+ };
142
+ }
143
+ function commitInput(instance, element, newOffset, inputInit) {
144
+ instance.dispatchUIEvent(element, 'input', inputInit);
145
+ commitValueAfterInput(element, newOffset);
146
+ }
147
+ function isValidNumberInput(value) {
148
+ var _value_match, _value_match1;
149
+ // the browser allows some invalid input but not others
150
+ // it allows up to two '-' at any place before any 'e' or one directly following 'e'
151
+ // it allows one '.' at any place before e
152
+ const valueParts = value.split('e', 2);
153
+ return !(/[^\d.\-e]/.test(value) || Number((_value_match = value.match(/-/g)) === null || _value_match === void 0 ? void 0 : _value_match.length) > 2 || Number((_value_match1 = value.match(/\./g)) === null || _value_match1 === void 0 ? void 0 : _value_match1.length) > 1 || valueParts[1] && !/^-?\d*$/.test(valueParts[1]));
154
+ }
155
+
156
+ export { input };
@@ -0,0 +1,25 @@
1
+ import '../utils/dataTransfer/Clipboard.js';
2
+ import { isDisabled } from '../utils/misc/isDisabled.js';
3
+ import { getWindow } from '../utils/misc/getWindow.js';
4
+ import { focusElement } from './focus.js';
5
+
6
+ function walkRadio(instance, el, direction) {
7
+ const window = getWindow(el);
8
+ const group = Array.from(el.ownerDocument.querySelectorAll(el.name ? `input[type="radio"][name="${window.CSS.escape(el.name)}"]` : `input[type="radio"][name=""], input[type="radio"]:not([name])`));
9
+ for(let i = group.findIndex((e)=>e === el) + direction;; i += direction){
10
+ if (!group[i]) {
11
+ i = direction > 0 ? 0 : group.length - 1;
12
+ }
13
+ if (group[i] === el) {
14
+ return;
15
+ }
16
+ if (isDisabled(group[i])) {
17
+ continue;
18
+ }
19
+ focusElement(group[i]);
20
+ instance.dispatchUIEvent(group[i], 'click');
21
+ return;
22
+ }
23
+ }
24
+
25
+ export { walkRadio };
@@ -0,0 +1,16 @@
1
+ import { getTargetTypeAndSelection } from './getTargetTypeAndSelection.js';
2
+
3
+ /**
4
+ * Get the range that would be overwritten by input.
5
+ */ function getInputRange(focusNode) {
6
+ const typeAndSelection = getTargetTypeAndSelection(focusNode);
7
+ if (typeAndSelection.type === 'input') {
8
+ return typeAndSelection.selection;
9
+ } else if (typeAndSelection.type === 'contenteditable') {
10
+ var _typeAndSelection_selection;
11
+ // Multi-range on contenteditable edits the first selection instead of the last
12
+ return (_typeAndSelection_selection = typeAndSelection.selection) === null || _typeAndSelection_selection === void 0 ? void 0 : _typeAndSelection_selection.getRangeAt(0);
13
+ }
14
+ }
15
+
16
+ export { getInputRange };
@@ -0,0 +1,29 @@
1
+ import { getUISelection } from '../../document/UI.js';
2
+ import '../../utils/dataTransfer/Clipboard.js';
3
+ import { getContentEditable } from '../../utils/edit/isContentEditable.js';
4
+ import { hasOwnSelection } from '../../utils/focus/selection.js';
5
+
6
+ /**
7
+ * Determine which selection logic and selection ranges to consider.
8
+ */ function getTargetTypeAndSelection(node) {
9
+ const element = getElement(node);
10
+ if (element && hasOwnSelection(element)) {
11
+ return {
12
+ type: 'input',
13
+ selection: getUISelection(element)
14
+ };
15
+ }
16
+ const selection = element === null || element === void 0 ? void 0 : element.ownerDocument.getSelection();
17
+ // It is possible to extend a single-range selection into a contenteditable.
18
+ // This results in the range acting like a range outside of contenteditable.
19
+ const isCE = getContentEditable(node) && (selection === null || selection === void 0 ? void 0 : selection.anchorNode) && getContentEditable(selection.anchorNode);
20
+ return {
21
+ type: isCE ? 'contenteditable' : 'default',
22
+ selection
23
+ };
24
+ }
25
+ function getElement(node) {
26
+ return node.nodeType === 1 ? node : node.parentElement;
27
+ }
28
+
29
+ export { getTargetTypeAndSelection };
@@ -0,0 +1,9 @@
1
+ export { getInputRange } from './getInputRange.js';
2
+ export { modifySelection } from './modifySelection.js';
3
+ export { moveSelection } from './moveSelection.js';
4
+ export { setSelectionPerMouseDown } from './setSelectionPerMouse.js';
5
+ export { modifySelectionPerMouseMove } from './modifySelectionPerMouse.js';
6
+ export { isAllSelected, selectAll } from './selectAll.js';
7
+ export { setSelectionRange } from './setSelectionRange.js';
8
+ export { setSelection } from './setSelection.js';
9
+ export { updateSelectionOnFocus } from './updateSelectionOnFocus.js';
@@ -0,0 +1,19 @@
1
+ import { setUISelection } from '../../document/UI.js';
2
+ import '../../utils/dataTransfer/Clipboard.js';
3
+ import { getTargetTypeAndSelection } from './getTargetTypeAndSelection.js';
4
+
5
+ /**
6
+ * Extend/shrink the selection like with Shift+Arrows or Shift+Mouse
7
+ */ function modifySelection({ focusNode, focusOffset }) {
8
+ var _focusNode_ownerDocument_getSelection, _focusNode_ownerDocument;
9
+ const typeAndSelection = getTargetTypeAndSelection(focusNode);
10
+ if (typeAndSelection.type === 'input') {
11
+ return setUISelection(focusNode, {
12
+ anchorOffset: typeAndSelection.selection.anchorOffset,
13
+ focusOffset
14
+ }, 'modify');
15
+ }
16
+ (_focusNode_ownerDocument = focusNode.ownerDocument) === null || _focusNode_ownerDocument === void 0 ? void 0 : (_focusNode_ownerDocument_getSelection = _focusNode_ownerDocument.getSelection()) === null || _focusNode_ownerDocument_getSelection === void 0 ? void 0 : _focusNode_ownerDocument_getSelection.extend(focusNode, focusOffset);
17
+ }
18
+
19
+ export { modifySelection };
@@ -0,0 +1,38 @@
1
+ import { setUISelection } from '../../document/UI.js';
2
+ import '../../utils/dataTransfer/Clipboard.js';
3
+ import { resolveCaretPosition } from './resolveCaretPosition.js';
4
+
5
+ function modifySelectionPerMouseMove(selectionRange, { document, target, node, offset }) {
6
+ const selectionFocus = resolveCaretPosition({
7
+ target,
8
+ node,
9
+ offset
10
+ });
11
+ if ('node' in selectionRange) {
12
+ // When the mouse is dragged outside of an input/textarea,
13
+ // the selection is extended to the beginning or end of the input
14
+ // depending on pointer position.
15
+ // TODO: extend selection according to pointer position
16
+ /* istanbul ignore else */ if (selectionFocus.node === selectionRange.node) {
17
+ const anchorOffset = selectionFocus.offset < selectionRange.start ? selectionRange.end : selectionRange.start;
18
+ const focusOffset = selectionFocus.offset > selectionRange.end || selectionFocus.offset < selectionRange.start ? selectionFocus.offset : selectionRange.end;
19
+ setUISelection(selectionRange.node, {
20
+ anchorOffset,
21
+ focusOffset
22
+ });
23
+ }
24
+ } else {
25
+ const range = selectionRange.cloneRange();
26
+ const cmp = range.comparePoint(selectionFocus.node, selectionFocus.offset);
27
+ if (cmp < 0) {
28
+ range.setStart(selectionFocus.node, selectionFocus.offset);
29
+ } else if (cmp > 0) {
30
+ range.setEnd(selectionFocus.node, selectionFocus.offset);
31
+ }
32
+ const selection = document.getSelection();
33
+ selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
34
+ selection === null || selection === void 0 ? void 0 : selection.addRange(range.cloneRange());
35
+ }
36
+ }
37
+
38
+ export { modifySelectionPerMouseMove };