@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.
- package/.eslintignore +6 -0
- package/CHANGELOG.md +26 -0
- package/act/package.json +7 -0
- package/blur/package.json +7 -0
- package/cjs/__chunks/3NIZQX5J.cjs +6 -0
- package/cjs/__chunks/3WW644T7.cjs +20 -0
- package/cjs/__chunks/4XKG4LDQ.cjs +57 -0
- package/cjs/__chunks/5W6DSYPH.cjs +10 -0
- package/cjs/__chunks/67NJSPQE.cjs +38 -0
- package/cjs/__chunks/6EKN2NLX.cjs +33 -0
- package/cjs/__chunks/7RUXTAPP.cjs +16 -0
- package/cjs/__chunks/AYRPODWR.cjs +1 -0
- package/cjs/__chunks/CIUADHPB.cjs +117 -0
- package/cjs/__chunks/DN7DXBEV.cjs +76 -0
- package/cjs/__chunks/HGTTGPFK.cjs +54 -0
- package/cjs/__chunks/HNTSACY7.cjs +26 -0
- package/cjs/__chunks/MQA5IB4L.cjs +6 -0
- package/cjs/__chunks/MRZIZFYG.cjs +28 -0
- package/cjs/__chunks/NT4G4PTA.cjs +110 -0
- package/cjs/__chunks/OZ7WVH2H.cjs +16 -0
- package/cjs/__chunks/SBXREEGO.cjs +12 -0
- package/cjs/__chunks/XMPFC5C3.cjs +45 -0
- package/cjs/__chunks/YZUJ47H3.cjs +220 -0
- package/cjs/__tests__/blur-test.d.ts +1 -0
- package/cjs/__tests__/use-all-events.d.ts +1 -0
- package/cjs/__utils.d.ts +8 -0
- package/cjs/act.cjs +7 -0
- package/cjs/act.d.ts +1 -0
- package/cjs/blur.cjs +9 -0
- package/cjs/blur.d.ts +2 -0
- package/cjs/click.cjs +16 -0
- package/cjs/click.d.ts +2 -0
- package/cjs/fire-event.cjs +6 -0
- package/cjs/fire-event.d.ts +2 -0
- package/cjs/focus.cjs +10 -0
- package/cjs/focus.d.ts +2 -0
- package/cjs/hover.cjs +10 -0
- package/cjs/hover.d.ts +1 -0
- package/cjs/index.cjs +120 -0
- package/cjs/index.d.ts +17 -0
- package/cjs/mock-get-client-rects.cjs +2 -0
- package/cjs/mock-get-client-rects.d.ts +1 -0
- package/cjs/mouse-down.cjs +12 -0
- package/cjs/mouse-down.d.ts +2 -0
- package/cjs/mouse-up.cjs +7 -0
- package/cjs/mouse-up.d.ts +1 -0
- package/cjs/press.cjs +14 -0
- package/cjs/press.d.ts +19 -0
- package/cjs/render.cjs +6 -0
- package/cjs/render.d.ts +4 -0
- package/cjs/screen.cjs +54 -0
- package/cjs/screen.d.ts +26 -0
- package/cjs/select.cjs +16 -0
- package/cjs/select.d.ts +1 -0
- package/cjs/sleep.cjs +8 -0
- package/cjs/sleep.d.ts +1 -0
- package/cjs/tap.cjs +17 -0
- package/cjs/tap.d.ts +1 -0
- package/cjs/tsconfig.build.tsbuildinfo +1 -0
- package/cjs/type.cjs +12 -0
- package/cjs/type.d.ts +3 -0
- package/cjs/wait-for.cjs +6 -0
- package/cjs/wait-for.d.ts +1 -0
- package/cjs/within.cjs +6 -0
- package/cjs/within.d.ts +1 -0
- package/click/package.json +7 -0
- package/esm/__chunks/3C72DPE2.js +54 -0
- package/esm/__chunks/4RXBOOIA.js +28 -0
- package/esm/__chunks/5JPM5LQX.js +6 -0
- package/esm/__chunks/5PINJ4MD.js +16 -0
- package/esm/__chunks/7UZH2HD4.js +117 -0
- package/esm/__chunks/B2UPDCBH.js +38 -0
- package/esm/__chunks/B4PLOQ7F.js +10 -0
- package/esm/__chunks/EFRHS5TP.js +76 -0
- package/esm/__chunks/GW7B4E2U.js +33 -0
- package/esm/__chunks/HCJFVOUB.js +26 -0
- package/esm/__chunks/OHA2FPAE.js +220 -0
- package/esm/__chunks/PNBZ5NXH.js +0 -0
- package/esm/__chunks/QA3ZS6S2.js +6 -0
- package/esm/__chunks/QZMWO6SS.js +12 -0
- package/esm/__chunks/RVXNT5Y5.js +57 -0
- package/esm/__chunks/VZYZVUSK.js +16 -0
- package/esm/__chunks/XJFAU7OI.js +45 -0
- package/esm/__chunks/XKB6RJJC.js +110 -0
- package/esm/__chunks/ZEO5Q6UD.js +20 -0
- package/esm/__tests__/blur-test.d.ts +1 -0
- package/esm/__tests__/use-all-events.d.ts +1 -0
- package/esm/__utils.d.ts +8 -0
- package/esm/act.d.ts +1 -0
- package/esm/act.js +7 -0
- package/esm/blur.d.ts +2 -0
- package/esm/blur.js +9 -0
- package/esm/click.d.ts +2 -0
- package/esm/click.js +16 -0
- package/esm/fire-event.d.ts +2 -0
- package/esm/fire-event.js +6 -0
- package/esm/focus.d.ts +2 -0
- package/esm/focus.js +10 -0
- package/esm/hover.d.ts +1 -0
- package/esm/hover.js +10 -0
- package/esm/index.d.ts +17 -0
- package/esm/index.js +120 -0
- package/esm/mock-get-client-rects.d.ts +1 -0
- package/esm/mock-get-client-rects.js +2 -0
- package/esm/mouse-down.d.ts +2 -0
- package/esm/mouse-down.js +12 -0
- package/esm/mouse-up.d.ts +1 -0
- package/esm/mouse-up.js +7 -0
- package/esm/press.d.ts +19 -0
- package/esm/press.js +14 -0
- package/esm/render.d.ts +4 -0
- package/esm/render.js +6 -0
- package/esm/screen.d.ts +26 -0
- package/esm/screen.js +54 -0
- package/esm/select.d.ts +1 -0
- package/esm/select.js +16 -0
- package/esm/sleep.d.ts +1 -0
- package/esm/sleep.js +8 -0
- package/esm/tap.d.ts +1 -0
- package/esm/tap.js +17 -0
- package/esm/tsconfig.build.tsbuildinfo +1 -0
- package/esm/type.d.ts +3 -0
- package/esm/type.js +12 -0
- package/esm/wait-for.d.ts +1 -0
- package/esm/wait-for.js +6 -0
- package/esm/within.d.ts +1 -0
- package/esm/within.js +6 -0
- package/fire-event/package.json +7 -0
- package/focus/package.json +7 -0
- package/hover/package.json +7 -0
- package/license +21 -0
- package/mock-get-client-rects/package.json +7 -0
- package/mouse-down/package.json +7 -0
- package/mouse-up/package.json +7 -0
- package/package.json +112 -6
- package/press/package.json +7 -0
- package/render/package.json +7 -0
- package/screen/package.json +7 -0
- package/select/package.json +7 -0
- package/sleep/package.json +7 -0
- package/tap/package.json +7 -0
- package/tsconfig.build.json +4 -0
- package/type/package.json +7 -0
- package/wait-for/package.json +7 -0
- 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,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;
|
package/esm/__utils.d.ts
ADDED
|
@@ -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
package/esm/blur.d.ts
ADDED
package/esm/blur.js
ADDED
package/esm/click.d.ts
ADDED