@ariakit/test 0.0.1 → 0.1.1

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 (145) hide show
  1. package/.eslintignore +6 -0
  2. package/CHANGELOG.md +26 -0
  3. package/act/package.json +7 -0
  4. package/blur/package.json +7 -0
  5. package/cjs/__chunks/3NIZQX5J.cjs +6 -0
  6. package/cjs/__chunks/3WW644T7.cjs +20 -0
  7. package/cjs/__chunks/4XKG4LDQ.cjs +57 -0
  8. package/cjs/__chunks/5W6DSYPH.cjs +10 -0
  9. package/cjs/__chunks/67NJSPQE.cjs +38 -0
  10. package/cjs/__chunks/6EKN2NLX.cjs +33 -0
  11. package/cjs/__chunks/7RUXTAPP.cjs +16 -0
  12. package/cjs/__chunks/AYRPODWR.cjs +1 -0
  13. package/cjs/__chunks/CIUADHPB.cjs +117 -0
  14. package/cjs/__chunks/DN7DXBEV.cjs +76 -0
  15. package/cjs/__chunks/HGTTGPFK.cjs +54 -0
  16. package/cjs/__chunks/HNTSACY7.cjs +26 -0
  17. package/cjs/__chunks/MQA5IB4L.cjs +6 -0
  18. package/cjs/__chunks/MRZIZFYG.cjs +28 -0
  19. package/cjs/__chunks/NT4G4PTA.cjs +110 -0
  20. package/cjs/__chunks/OZ7WVH2H.cjs +16 -0
  21. package/cjs/__chunks/SBXREEGO.cjs +12 -0
  22. package/cjs/__chunks/XMPFC5C3.cjs +45 -0
  23. package/cjs/__chunks/YZUJ47H3.cjs +220 -0
  24. package/cjs/__tests__/blur-test.d.ts +1 -0
  25. package/cjs/__tests__/use-all-events.d.ts +1 -0
  26. package/cjs/__utils.d.ts +8 -0
  27. package/cjs/act.cjs +7 -0
  28. package/cjs/act.d.ts +1 -0
  29. package/cjs/blur.cjs +9 -0
  30. package/cjs/blur.d.ts +2 -0
  31. package/cjs/click.cjs +16 -0
  32. package/cjs/click.d.ts +2 -0
  33. package/cjs/fire-event.cjs +6 -0
  34. package/cjs/fire-event.d.ts +2 -0
  35. package/cjs/focus.cjs +10 -0
  36. package/cjs/focus.d.ts +2 -0
  37. package/cjs/hover.cjs +10 -0
  38. package/cjs/hover.d.ts +1 -0
  39. package/cjs/index.cjs +120 -0
  40. package/cjs/index.d.ts +17 -0
  41. package/cjs/mock-get-client-rects.cjs +2 -0
  42. package/cjs/mock-get-client-rects.d.ts +1 -0
  43. package/cjs/mouse-down.cjs +12 -0
  44. package/cjs/mouse-down.d.ts +2 -0
  45. package/cjs/mouse-up.cjs +7 -0
  46. package/cjs/mouse-up.d.ts +1 -0
  47. package/cjs/press.cjs +14 -0
  48. package/cjs/press.d.ts +19 -0
  49. package/cjs/render.cjs +6 -0
  50. package/cjs/render.d.ts +4 -0
  51. package/cjs/screen.cjs +54 -0
  52. package/cjs/screen.d.ts +26 -0
  53. package/cjs/select.cjs +16 -0
  54. package/cjs/select.d.ts +1 -0
  55. package/cjs/sleep.cjs +8 -0
  56. package/cjs/sleep.d.ts +1 -0
  57. package/cjs/tap.cjs +17 -0
  58. package/cjs/tap.d.ts +1 -0
  59. package/cjs/tsconfig.build.tsbuildinfo +1 -0
  60. package/cjs/type.cjs +12 -0
  61. package/cjs/type.d.ts +3 -0
  62. package/cjs/wait-for.cjs +6 -0
  63. package/cjs/wait-for.d.ts +1 -0
  64. package/cjs/within.cjs +6 -0
  65. package/cjs/within.d.ts +1 -0
  66. package/click/package.json +7 -0
  67. package/esm/__chunks/3C72DPE2.js +54 -0
  68. package/esm/__chunks/4RXBOOIA.js +28 -0
  69. package/esm/__chunks/5JPM5LQX.js +6 -0
  70. package/esm/__chunks/5PINJ4MD.js +16 -0
  71. package/esm/__chunks/7UZH2HD4.js +117 -0
  72. package/esm/__chunks/B2UPDCBH.js +38 -0
  73. package/esm/__chunks/B4PLOQ7F.js +10 -0
  74. package/esm/__chunks/EFRHS5TP.js +76 -0
  75. package/esm/__chunks/GW7B4E2U.js +33 -0
  76. package/esm/__chunks/HCJFVOUB.js +26 -0
  77. package/esm/__chunks/OHA2FPAE.js +220 -0
  78. package/esm/__chunks/PNBZ5NXH.js +0 -0
  79. package/esm/__chunks/QA3ZS6S2.js +6 -0
  80. package/esm/__chunks/QZMWO6SS.js +12 -0
  81. package/esm/__chunks/RVXNT5Y5.js +57 -0
  82. package/esm/__chunks/VZYZVUSK.js +16 -0
  83. package/esm/__chunks/XJFAU7OI.js +45 -0
  84. package/esm/__chunks/XKB6RJJC.js +110 -0
  85. package/esm/__chunks/ZEO5Q6UD.js +20 -0
  86. package/esm/__tests__/blur-test.d.ts +1 -0
  87. package/esm/__tests__/use-all-events.d.ts +1 -0
  88. package/esm/__utils.d.ts +8 -0
  89. package/esm/act.d.ts +1 -0
  90. package/esm/act.js +7 -0
  91. package/esm/blur.d.ts +2 -0
  92. package/esm/blur.js +9 -0
  93. package/esm/click.d.ts +2 -0
  94. package/esm/click.js +16 -0
  95. package/esm/fire-event.d.ts +2 -0
  96. package/esm/fire-event.js +6 -0
  97. package/esm/focus.d.ts +2 -0
  98. package/esm/focus.js +10 -0
  99. package/esm/hover.d.ts +1 -0
  100. package/esm/hover.js +10 -0
  101. package/esm/index.d.ts +17 -0
  102. package/esm/index.js +120 -0
  103. package/esm/mock-get-client-rects.d.ts +1 -0
  104. package/esm/mock-get-client-rects.js +2 -0
  105. package/esm/mouse-down.d.ts +2 -0
  106. package/esm/mouse-down.js +12 -0
  107. package/esm/mouse-up.d.ts +1 -0
  108. package/esm/mouse-up.js +7 -0
  109. package/esm/press.d.ts +19 -0
  110. package/esm/press.js +14 -0
  111. package/esm/render.d.ts +4 -0
  112. package/esm/render.js +6 -0
  113. package/esm/screen.d.ts +26 -0
  114. package/esm/screen.js +54 -0
  115. package/esm/select.d.ts +1 -0
  116. package/esm/select.js +16 -0
  117. package/esm/sleep.d.ts +1 -0
  118. package/esm/sleep.js +8 -0
  119. package/esm/tap.d.ts +1 -0
  120. package/esm/tap.js +17 -0
  121. package/esm/tsconfig.build.tsbuildinfo +1 -0
  122. package/esm/type.d.ts +3 -0
  123. package/esm/type.js +12 -0
  124. package/esm/wait-for.d.ts +1 -0
  125. package/esm/wait-for.js +6 -0
  126. package/esm/within.d.ts +1 -0
  127. package/esm/within.js +6 -0
  128. package/fire-event/package.json +7 -0
  129. package/focus/package.json +7 -0
  130. package/hover/package.json +7 -0
  131. package/license +21 -0
  132. package/mock-get-client-rects/package.json +7 -0
  133. package/mouse-down/package.json +7 -0
  134. package/mouse-up/package.json +7 -0
  135. package/package.json +112 -6
  136. package/press/package.json +7 -0
  137. package/render/package.json +7 -0
  138. package/screen/package.json +7 -0
  139. package/select/package.json +7 -0
  140. package/sleep/package.json +7 -0
  141. package/tap/package.json +7 -0
  142. package/tsconfig.build.json +4 -0
  143. package/type/package.json +7 -0
  144. package/wait-for/package.json +7 -0
  145. package/within/package.json +7 -0
@@ -0,0 +1,76 @@
1
+ import {
2
+ mouseUp
3
+ } from "./VZYZVUSK.js";
4
+ import {
5
+ mouseDown
6
+ } from "./XJFAU7OI.js";
7
+ import {
8
+ hover
9
+ } from "./RVXNT5Y5.js";
10
+ import {
11
+ fireEvent
12
+ } from "./B2UPDCBH.js";
13
+ import {
14
+ sleep
15
+ } from "./5PINJ4MD.js";
16
+
17
+ // src/select.ts
18
+ async function select(text, element = document.body, options) {
19
+ const document2 = element.ownerDocument;
20
+ await hover(element, options);
21
+ mouseDown(element, options);
22
+ element.dispatchEvent(
23
+ new Event("selectstart", {
24
+ bubbles: true,
25
+ cancelable: true,
26
+ composed: false
27
+ })
28
+ );
29
+ const startIndex = element.textContent?.indexOf(text) ?? -1;
30
+ const selection = document2.getSelection();
31
+ const range = document2.createRange();
32
+ for (let i = 1; i <= text.length; i++) {
33
+ const iterator = document2.createNodeIterator(element, NodeFilter.SHOW_TEXT);
34
+ const textSlice = text.slice(0, i);
35
+ const endIndex = startIndex + textSlice.length;
36
+ let index = startIndex;
37
+ let node = null;
38
+ let charCount = 0;
39
+ let startContainer = null;
40
+ let startOffset = -1;
41
+ let endContainer = null;
42
+ let endOffset = -1;
43
+ while (index >= 0 && index < endIndex && charCount < endIndex && (node = iterator.nextNode())) {
44
+ const textContent = node.textContent;
45
+ if (!textContent)
46
+ continue;
47
+ charCount += textContent.length;
48
+ if (index > charCount)
49
+ continue;
50
+ if (!startContainer) {
51
+ startContainer = node;
52
+ startOffset = index - charCount + textContent.length;
53
+ }
54
+ endContainer = node;
55
+ endOffset = endIndex - charCount + textContent.length;
56
+ index++;
57
+ }
58
+ if (!startContainer || !endContainer)
59
+ continue;
60
+ await hover(element, options);
61
+ range.setStart(startContainer, startOffset);
62
+ range.setEnd(endContainer, endOffset);
63
+ selection?.removeAllRanges();
64
+ selection?.addRange(range);
65
+ }
66
+ await sleep();
67
+ mouseUp(element, options);
68
+ fireEvent.click(element, { detail: 1, ...options });
69
+ selection?.removeAllRanges();
70
+ selection?.addRange(range);
71
+ await sleep();
72
+ }
73
+
74
+ export {
75
+ select
76
+ };
@@ -0,0 +1,33 @@
1
+ import {
2
+ fireEvent
3
+ } from "./B2UPDCBH.js";
4
+ import {
5
+ act
6
+ } from "./ZEO5Q6UD.js";
7
+
8
+ // src/blur.ts
9
+ import { getActiveElement } from "@ariakit/core/utils/dom";
10
+ function blur(element) {
11
+ if (element == null) {
12
+ element = document.activeElement;
13
+ }
14
+ if (!element)
15
+ return;
16
+ if (element.tagName === "BODY")
17
+ return;
18
+ if (getActiveElement(element) !== element)
19
+ return;
20
+ if (element.dirty) {
21
+ fireEvent.change(element);
22
+ element.dirty = false;
23
+ }
24
+ act(() => {
25
+ if (element instanceof HTMLElement || element instanceof SVGElement) {
26
+ element.blur();
27
+ }
28
+ });
29
+ }
30
+
31
+ export {
32
+ blur
33
+ };
@@ -0,0 +1,26 @@
1
+ import {
2
+ isBrowser
3
+ } from "./ZEO5Q6UD.js";
4
+
5
+ // src/mock-get-client-rects.ts
6
+ if (!isBrowser && typeof window !== "undefined") {
7
+ window.Element.prototype.getClientRects = function getClientRects() {
8
+ const isHidden = (element) => {
9
+ if (element.parentElement && isHidden(element.parentElement)) {
10
+ return true;
11
+ }
12
+ if (!(element instanceof HTMLElement)) {
13
+ return false;
14
+ }
15
+ if (element.hidden) {
16
+ return true;
17
+ }
18
+ const style = getComputedStyle(element);
19
+ return style.display === "none" || style.visibility === "hidden";
20
+ };
21
+ if (isHidden(this)) {
22
+ return [];
23
+ }
24
+ return [{ width: 1, height: 1 }];
25
+ };
26
+ }
@@ -0,0 +1,220 @@
1
+ import {
2
+ type
3
+ } from "./XKB6RJJC.js";
4
+ import {
5
+ blur
6
+ } from "./GW7B4E2U.js";
7
+ import {
8
+ focus
9
+ } from "./4RXBOOIA.js";
10
+ import {
11
+ fireEvent
12
+ } from "./B2UPDCBH.js";
13
+ import {
14
+ sleep
15
+ } from "./5PINJ4MD.js";
16
+ import {
17
+ queuedMicrotasks
18
+ } from "./ZEO5Q6UD.js";
19
+
20
+ // src/press.ts
21
+ import { isTextField } from "@ariakit/core/utils/dom";
22
+ import {
23
+ getNextTabbable,
24
+ getPreviousTabbable,
25
+ isFocusable
26
+ } from "@ariakit/core/utils/focus";
27
+ var clickableInputTypes = [
28
+ "button",
29
+ "color",
30
+ "file",
31
+ "image",
32
+ "reset",
33
+ "submit"
34
+ ];
35
+ function submitFormByPressingEnterOn(element, options) {
36
+ const { form } = element;
37
+ if (!form)
38
+ return;
39
+ const elements = Array.from(form.elements);
40
+ const validInputs = elements.filter(
41
+ (el) => el instanceof HTMLInputElement && isTextField(el)
42
+ );
43
+ const submitButton = elements.find(
44
+ (el) => (el instanceof HTMLInputElement || el instanceof HTMLButtonElement) && el.type === "submit"
45
+ );
46
+ if (validInputs.length === 1 || submitButton) {
47
+ fireEvent.submit(form, options);
48
+ }
49
+ }
50
+ function isNumberInput(element) {
51
+ return element instanceof HTMLInputElement && element.type === "number";
52
+ }
53
+ function incrementNumberInput(element, by = 1) {
54
+ const value = +element.value + by;
55
+ const max = element.max ? +element.max : Number.MAX_SAFE_INTEGER;
56
+ const min = element.min ? +element.min : Number.MIN_SAFE_INTEGER;
57
+ if (value > max || value < min)
58
+ return;
59
+ element.value = value.toString();
60
+ fireEvent.input(element);
61
+ fireEvent.change(element);
62
+ }
63
+ var keyDownMap = {
64
+ Tab(_, { shiftKey }) {
65
+ const nextElement = shiftKey ? getPreviousTabbable() : getNextTabbable();
66
+ if (nextElement) {
67
+ focus(nextElement);
68
+ }
69
+ },
70
+ Enter(element, options) {
71
+ const nonSubmittableTypes = [...clickableInputTypes, "hidden"];
72
+ const isClickable = element.tagName === "BUTTON" || element instanceof HTMLInputElement && clickableInputTypes.includes(element.type);
73
+ const isSubmittable = element instanceof HTMLInputElement && !nonSubmittableTypes.includes(element.type);
74
+ if (isClickable) {
75
+ fireEvent.click(element, options);
76
+ } else if (isSubmittable) {
77
+ submitFormByPressingEnterOn(element, options);
78
+ }
79
+ },
80
+ ArrowLeft(element, { shiftKey }) {
81
+ if (isTextField(element)) {
82
+ const { value, selectionStart, selectionEnd, selectionDirection } = element;
83
+ const [start, end] = [selectionStart ?? 0, selectionEnd ?? 0];
84
+ const collapsing = !shiftKey && start !== end;
85
+ const nextStart = Math.max(0, collapsing ? start : start - 1);
86
+ const nextEnd = Math.min(value.length, shiftKey ? end : nextStart);
87
+ element.setSelectionRange(
88
+ nextStart,
89
+ nextEnd,
90
+ selectionDirection || "backward"
91
+ );
92
+ }
93
+ },
94
+ ArrowRight(element, { shiftKey }) {
95
+ if (isTextField(element)) {
96
+ const { value, selectionStart, selectionEnd, selectionDirection } = element;
97
+ const [start, end] = [selectionStart ?? 0, selectionEnd ?? 0];
98
+ const collapsing = !shiftKey && start !== end;
99
+ const nextEnd = Math.min(value.length, collapsing ? end : end + 1);
100
+ const nextStart = Math.max(0, shiftKey ? start : nextEnd);
101
+ element.setSelectionRange(
102
+ nextStart,
103
+ nextEnd,
104
+ selectionDirection || "forward"
105
+ );
106
+ }
107
+ },
108
+ ArrowUp(element, { shiftKey }) {
109
+ if (isTextField(element)) {
110
+ if (!shiftKey) {
111
+ return element.setSelectionRange(0, 0);
112
+ } else {
113
+ const { selectionStart, selectionEnd, selectionDirection } = element;
114
+ const [start, end] = [selectionStart ?? 0, selectionEnd ?? 0];
115
+ if (selectionDirection === "forward") {
116
+ element.setSelectionRange(start, start);
117
+ } else {
118
+ element.setSelectionRange(0, end, "backward");
119
+ }
120
+ }
121
+ } else if (isNumberInput(element)) {
122
+ incrementNumberInput(element);
123
+ }
124
+ },
125
+ ArrowDown(element, { shiftKey }) {
126
+ if (isTextField(element)) {
127
+ const length = element.value.length;
128
+ if (!shiftKey) {
129
+ element.setSelectionRange(length, length);
130
+ } else {
131
+ const { selectionStart, selectionEnd, selectionDirection } = element;
132
+ const [start, end] = [selectionStart ?? 0, selectionEnd ?? 0];
133
+ if (selectionDirection === "backward") {
134
+ element.setSelectionRange(end, end);
135
+ } else {
136
+ element.setSelectionRange(start, length, "forward");
137
+ }
138
+ }
139
+ } else if (isNumberInput(element)) {
140
+ incrementNumberInput(element, -1);
141
+ }
142
+ }
143
+ };
144
+ var keyUpMap = {
145
+ // Space
146
+ " ": (element, options) => {
147
+ const spaceableTypes = [...clickableInputTypes, "checkbox", "radio"];
148
+ const isSpaceable = element.tagName === "BUTTON" || element instanceof HTMLInputElement && spaceableTypes.includes(element.type);
149
+ if (isSpaceable) {
150
+ fireEvent.click(element, options);
151
+ }
152
+ }
153
+ };
154
+ async function press(key, element, options = {}) {
155
+ if (element == null) {
156
+ element = document.activeElement || document.body;
157
+ }
158
+ if (!element)
159
+ return;
160
+ if (!isFocusable(element) && element.tagName !== "BODY")
161
+ return;
162
+ if (isTextField(element)) {
163
+ if (key.length === 1) {
164
+ return type(key, element, options);
165
+ } else if (key === "Delete") {
166
+ return type("\x7F", element, options);
167
+ } else if (key === "Backspace") {
168
+ return type("\b", element, options);
169
+ } else if (key === "Enter" && element.tagName === "TEXTAREA") {
170
+ return type("\n", element, options);
171
+ }
172
+ }
173
+ if (element.ownerDocument?.activeElement !== element) {
174
+ if (element.tagName === "BODY") {
175
+ blur();
176
+ } else {
177
+ focus(element);
178
+ }
179
+ }
180
+ await sleep();
181
+ let defaultAllowed = fireEvent.keyDown(element, { key, ...options });
182
+ await queuedMicrotasks();
183
+ if (defaultAllowed && key in keyDownMap && !options.metaKey) {
184
+ keyDownMap[key]?.(element, options);
185
+ }
186
+ await sleep();
187
+ if (element.ownerDocument?.activeElement !== element) {
188
+ element = element.ownerDocument.activeElement;
189
+ }
190
+ if (!fireEvent.keyUp(element, { key, ...options })) {
191
+ defaultAllowed = false;
192
+ }
193
+ await queuedMicrotasks();
194
+ if (defaultAllowed && key in keyUpMap && !options.metaKey) {
195
+ keyUpMap[key]?.(element, options);
196
+ }
197
+ await sleep();
198
+ }
199
+ function createPress(key, defaultOptions = {}) {
200
+ return (element, options = {}) => press(key, element, { ...defaultOptions, ...options });
201
+ }
202
+ press.Escape = createPress("Escape");
203
+ press.Backspace = createPress("Backspace");
204
+ press.Delete = createPress("Delete");
205
+ press.Tab = createPress("Tab");
206
+ press.ShiftTab = createPress("Tab", { shiftKey: true });
207
+ press.Enter = createPress("Enter");
208
+ press.Space = createPress(" ");
209
+ press.ArrowUp = createPress("ArrowUp");
210
+ press.ArrowRight = createPress("ArrowRight");
211
+ press.ArrowDown = createPress("ArrowDown");
212
+ press.ArrowLeft = createPress("ArrowLeft");
213
+ press.End = createPress("End");
214
+ press.Home = createPress("Home");
215
+ press.PageUp = createPress("PageUp");
216
+ press.PageDown = createPress("PageDown");
217
+
218
+ export {
219
+ press
220
+ };
File without changes
@@ -0,0 +1,6 @@
1
+ // src/within.ts
2
+ import { within } from "@testing-library/react";
3
+
4
+ export {
5
+ within
6
+ };
@@ -0,0 +1,12 @@
1
+ import {
2
+ click
3
+ } from "./7UZH2HD4.js";
4
+
5
+ // src/tap.ts
6
+ async function tap(element, options) {
7
+ await click(element, options, true);
8
+ }
9
+
10
+ export {
11
+ tap
12
+ };
@@ -0,0 +1,57 @@
1
+ import {
2
+ fireEvent
3
+ } from "./B2UPDCBH.js";
4
+ import {
5
+ sleep
6
+ } from "./5PINJ4MD.js";
7
+ import {
8
+ queuedMicrotasks
9
+ } from "./ZEO5Q6UD.js";
10
+
11
+ // src/hover.ts
12
+ function isPointerEventsEnabled(element) {
13
+ return getComputedStyle(element).pointerEvents !== "none";
14
+ }
15
+ async function hover(element, options) {
16
+ const document = element.ownerDocument;
17
+ const { lastHovered } = document;
18
+ const { disabled } = element;
19
+ const pointerEventsEnabled = isPointerEventsEnabled(element);
20
+ if (lastHovered && lastHovered !== element) {
21
+ fireEvent.pointerMove(lastHovered, options);
22
+ fireEvent.mouseMove(lastHovered, options);
23
+ if (isPointerEventsEnabled(lastHovered)) {
24
+ const isElementWithinLastHovered = lastHovered.contains(element);
25
+ const relatedTarget = pointerEventsEnabled ? element : null;
26
+ const leaveOptions = { ...options, relatedTarget };
27
+ fireEvent.pointerOut(lastHovered, leaveOptions);
28
+ if (!isElementWithinLastHovered) {
29
+ fireEvent.pointerLeave(lastHovered, leaveOptions);
30
+ }
31
+ fireEvent.mouseOut(lastHovered, leaveOptions);
32
+ if (!isElementWithinLastHovered) {
33
+ fireEvent.mouseLeave(lastHovered, leaveOptions);
34
+ }
35
+ }
36
+ }
37
+ await sleep();
38
+ if (pointerEventsEnabled) {
39
+ const enterOptions = lastHovered ? { relatedTarget: lastHovered, ...options } : options;
40
+ fireEvent.pointerOver(element, enterOptions);
41
+ fireEvent.pointerEnter(element, enterOptions);
42
+ if (!disabled) {
43
+ fireEvent.mouseOver(element, enterOptions);
44
+ fireEvent.mouseEnter(element, enterOptions);
45
+ }
46
+ }
47
+ fireEvent.pointerMove(element, options);
48
+ if (!disabled) {
49
+ fireEvent.mouseMove(element, options);
50
+ }
51
+ document.lastHovered = element;
52
+ await queuedMicrotasks();
53
+ }
54
+
55
+ export {
56
+ hover
57
+ };
@@ -0,0 +1,16 @@
1
+ import {
2
+ fireEvent
3
+ } from "./B2UPDCBH.js";
4
+
5
+ // src/mouse-up.ts
6
+ function mouseUp(element, options) {
7
+ const { disabled } = element;
8
+ fireEvent.pointerUp(element, options);
9
+ if (disabled)
10
+ return;
11
+ fireEvent.mouseUp(element, { detail: 1, ...options });
12
+ }
13
+
14
+ export {
15
+ mouseUp
16
+ };
@@ -0,0 +1,45 @@
1
+ import {
2
+ blur
3
+ } from "./GW7B4E2U.js";
4
+ import {
5
+ focus
6
+ } from "./4RXBOOIA.js";
7
+ import {
8
+ fireEvent
9
+ } from "./B2UPDCBH.js";
10
+
11
+ // src/mouse-down.ts
12
+ import { getDocument } from "@ariakit/core/utils/dom";
13
+ import { getClosestFocusable, isFocusable } from "@ariakit/core/utils/focus";
14
+ function mouseDown(element, options) {
15
+ const { disabled } = element;
16
+ let defaultAllowed = fireEvent.pointerDown(element, options);
17
+ if (!disabled) {
18
+ if (!fireEvent.mouseDown(element, { detail: 1, ...options })) {
19
+ defaultAllowed = false;
20
+ }
21
+ }
22
+ if (defaultAllowed) {
23
+ const selection = getDocument(element).getSelection();
24
+ if (selection && selection.rangeCount) {
25
+ const range = selection.getRangeAt(0);
26
+ if (!range.collapsed) {
27
+ selection.removeAllRanges();
28
+ }
29
+ }
30
+ if (isFocusable(element) && getComputedStyle(element).pointerEvents !== "none") {
31
+ focus(element);
32
+ } else if (element.parentElement) {
33
+ const closestFocusable = getClosestFocusable(element.parentElement);
34
+ if (closestFocusable) {
35
+ focus(closestFocusable);
36
+ } else {
37
+ blur();
38
+ }
39
+ }
40
+ }
41
+ }
42
+
43
+ export {
44
+ mouseDown
45
+ };
@@ -0,0 +1,110 @@
1
+ import {
2
+ focus
3
+ } from "./4RXBOOIA.js";
4
+ import {
5
+ fireEvent
6
+ } from "./B2UPDCBH.js";
7
+ import {
8
+ sleep
9
+ } from "./5PINJ4MD.js";
10
+ import {
11
+ queuedMicrotasks
12
+ } from "./ZEO5Q6UD.js";
13
+
14
+ // src/type.ts
15
+ import { getActiveElement, isTextField } from "@ariakit/core/utils/dom";
16
+ import { isFocusable } from "@ariakit/core/utils/focus";
17
+ function getKeyFromChar(key) {
18
+ if (key === "\x7F")
19
+ return "Delete";
20
+ if (key === "\b")
21
+ return "Backspace";
22
+ if (key === "\n")
23
+ return "Enter";
24
+ if (key === " ")
25
+ return "Tab";
26
+ return key;
27
+ }
28
+ function workAroundEmailInput(element) {
29
+ const input = element;
30
+ if (input.tagName !== "INPUT" || input.type !== "email")
31
+ return () => {
32
+ };
33
+ input.type = "text";
34
+ return () => {
35
+ input.type = "email";
36
+ };
37
+ }
38
+ async function type(text, element, options = {}) {
39
+ if (element == null) {
40
+ element = document.activeElement;
41
+ }
42
+ if (!element || !isFocusable(element))
43
+ return;
44
+ focus(element);
45
+ element.dirty = true;
46
+ const restoreEmailInput = workAroundEmailInput(element);
47
+ for (const char of text) {
48
+ const key = getKeyFromChar(char);
49
+ let value = "";
50
+ let inputType = "insertText";
51
+ let defaultAllowed = fireEvent.keyDown(element, { key, ...options });
52
+ await queuedMicrotasks();
53
+ element = getActiveElement(element) || element;
54
+ if (isTextField(element)) {
55
+ const input = element;
56
+ const [start, end] = [input.selectionStart ?? 0, input.selectionEnd ?? 0];
57
+ const collapsed = start === end;
58
+ let nextCaretPosition = start;
59
+ if (char === "\x7F") {
60
+ const firstPart = input.value.slice(0, start);
61
+ const secondPart = input.value.slice(collapsed ? end + 1 : end);
62
+ value = `${firstPart}${secondPart}`;
63
+ inputType = "deleteContentForward";
64
+ } else if (char === "\b") {
65
+ nextCaretPosition = collapsed ? Math.max(start - 1, 0) : start;
66
+ const firstPart = input.value.slice(0, nextCaretPosition);
67
+ const lastPart = input.value.slice(end, input.value.length);
68
+ value = `${firstPart}${lastPart}`;
69
+ inputType = "deleteContentBackward";
70
+ } else {
71
+ const firstPart = input.value.slice(0, start);
72
+ const lastPart = input.value.slice(end, input.value.length);
73
+ nextCaretPosition = start + 1;
74
+ value = `${firstPart}${char}${lastPart}`;
75
+ }
76
+ if (defaultAllowed && !input.readOnly) {
77
+ if (inputType === "insertText") {
78
+ defaultAllowed = fireEvent.keyPress(input, {
79
+ key,
80
+ charCode: key.charCodeAt(0),
81
+ ...options
82
+ });
83
+ }
84
+ if (defaultAllowed) {
85
+ fireEvent.input(input, {
86
+ data: char,
87
+ target: {
88
+ value,
89
+ selectionStart: nextCaretPosition,
90
+ selectionEnd: nextCaretPosition
91
+ },
92
+ inputType,
93
+ ...options
94
+ });
95
+ if (input.selectionStart !== nextCaretPosition) {
96
+ input.setSelectionRange(nextCaretPosition, nextCaretPosition);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ await sleep();
102
+ fireEvent.keyUp(element, { key, ...options });
103
+ await sleep();
104
+ }
105
+ restoreEmailInput();
106
+ }
107
+
108
+ export {
109
+ type
110
+ };
@@ -0,0 +1,20 @@
1
+ // src/__utils.ts
2
+ import { act as reactAct } from "@testing-library/react";
3
+ var isBrowser = typeof navigator !== "undefined" && !navigator.userAgent.includes("jsdom") && !("happyDOM" in window);
4
+ var noopAct = (callback) => callback();
5
+ var act = isBrowser ? noopAct : reactAct;
6
+ function queuedMicrotasks() {
7
+ return act(() => Promise.resolve());
8
+ }
9
+ function nextFrame() {
10
+ return act(
11
+ () => new Promise((resolve) => requestAnimationFrame(() => resolve()))
12
+ );
13
+ }
14
+
15
+ export {
16
+ isBrowser,
17
+ act,
18
+ queuedMicrotasks,
19
+ nextFrame
20
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export declare function useAllEvents(ref: React.RefObject<Element>, stack: string[]): void;
@@ -0,0 +1,8 @@
1
+ export type DirtiableElement = Element & {
2
+ dirty?: boolean;
3
+ };
4
+ export type TextField = HTMLInputElement | HTMLTextAreaElement;
5
+ export declare const isBrowser: boolean;
6
+ export declare const act: typeof import("react-dom/test-utils").act;
7
+ export declare function queuedMicrotasks(): Promise<void>;
8
+ export declare function nextFrame(): Promise<void>;
package/esm/act.d.ts ADDED
@@ -0,0 +1 @@
1
+ export { act } from "./__utils.js";
package/esm/act.js ADDED
@@ -0,0 +1,7 @@
1
+ import "./__chunks/PNBZ5NXH.js";
2
+ import {
3
+ act
4
+ } from "./__chunks/ZEO5Q6UD.js";
5
+ export {
6
+ act
7
+ };
package/esm/blur.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import type { DirtiableElement } from "./__utils.js";
2
+ export declare function blur(element?: DirtiableElement | null): void;
package/esm/blur.js ADDED
@@ -0,0 +1,9 @@
1
+ import {
2
+ blur
3
+ } from "./__chunks/GW7B4E2U.js";
4
+ import "./__chunks/B2UPDCBH.js";
5
+ import "./__chunks/PNBZ5NXH.js";
6
+ import "./__chunks/ZEO5Q6UD.js";
7
+ export {
8
+ blur
9
+ };
package/esm/click.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import "./mock-get-client-rects.js";
2
+ export declare function click(element: Element, options?: MouseEventInit, tap?: boolean): Promise<void>;