@ariakit/test 0.4.8 → 0.4.9
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/CHANGELOG.md +4 -0
- package/cjs/__chunks/4P2TRHCD.cjs +67 -0
- package/cjs/__chunks/5USXAKSO.cjs +32 -0
- package/cjs/__chunks/72WSX5BL.cjs +201 -0
- package/cjs/__chunks/AA4DRZPS.cjs +19 -0
- package/cjs/__chunks/ANKVPRYL.cjs +27 -0
- package/cjs/__chunks/AYPQCP2P.cjs +90 -0
- package/cjs/__chunks/CAAOBH77.cjs +89 -0
- package/cjs/__chunks/E4OOGVMW.cjs +24 -0
- package/cjs/__chunks/EA2M4PHP.cjs +235 -0
- package/cjs/__chunks/EG24EIKR.cjs +134 -0
- package/cjs/__chunks/IDMD7IDF.cjs +1 -0
- package/cjs/__chunks/IWR6DHL3.cjs +13 -0
- package/cjs/__chunks/KKOPNQIH.cjs +133 -0
- package/cjs/__chunks/ML4UXKC3.cjs +56 -0
- package/cjs/__chunks/RHX5DDWS.cjs +83 -0
- package/cjs/__chunks/SMHVZDHR.cjs +33 -0
- package/cjs/__chunks/UYJAT53J.cjs +118 -0
- package/cjs/__chunks/XODU6QCY.cjs +12 -0
- package/cjs/blur.cjs +9 -0
- package/cjs/click.cjs +15 -0
- package/cjs/dispatch.cjs +8 -0
- package/cjs/focus.cjs +9 -0
- package/cjs/hover.cjs +10 -0
- package/cjs/index.cjs +64 -0
- package/cjs/mouse-down.cjs +11 -0
- package/cjs/mouse-up.cjs +9 -0
- package/cjs/playwright.cjs +19 -0
- package/cjs/press.cjs +13 -0
- package/cjs/query.cjs +10 -0
- package/cjs/react.cjs +103 -0
- package/cjs/select.cjs +15 -0
- package/cjs/sleep.cjs +8 -0
- package/cjs/tap.cjs +16 -0
- package/cjs/type.cjs +11 -0
- package/cjs/wait-for.cjs +8 -0
- package/esm/__chunks/433S5VGJ.js +91 -0
- package/esm/__chunks/4SG6SLGL.js +34 -0
- package/esm/__chunks/4VR4URFV.js +119 -0
- package/esm/__chunks/BG5U5JFH.js +68 -0
- package/esm/__chunks/CSF4U66P.js +13 -0
- package/esm/__chunks/CWTUOQ5Z.js +91 -0
- package/esm/__chunks/DFUW3DFA.js +134 -0
- package/esm/__chunks/DZ24E43J.js +20 -0
- package/esm/__chunks/HFG3HB6M.js +85 -0
- package/esm/__chunks/LK25WCYN.js +202 -0
- package/esm/__chunks/NR24PD4G.js +28 -0
- package/esm/__chunks/OLDQVNUU.js +236 -0
- package/esm/__chunks/RHBNMDK4.js +1 -0
- package/esm/__chunks/RTBDUQHD.js +135 -0
- package/esm/__chunks/SB7WYA2U.js +14 -0
- package/esm/__chunks/SM5ASDQ3.js +25 -0
- package/esm/__chunks/SOWA2DKF.js +33 -0
- package/esm/__chunks/Z7WVAAXJ.js +57 -0
- package/esm/blur.js +10 -0
- package/esm/click.js +16 -0
- package/esm/dispatch.js +9 -0
- package/esm/focus.js +10 -0
- package/esm/hover.js +11 -0
- package/esm/index.js +65 -0
- package/esm/mouse-down.js +12 -0
- package/esm/mouse-up.js +10 -0
- package/esm/playwright.js +20 -0
- package/esm/press.js +14 -0
- package/esm/query.js +11 -0
- package/esm/react.js +104 -0
- package/esm/select.js +16 -0
- package/esm/sleep.js +9 -0
- package/esm/tap.js +17 -0
- package/esm/type.js +12 -0
- package/esm/wait-for.js +9 -0
- package/package.json +64 -64
- package/readme.md +3 -2
- /package/cjs/__tests__/{blur-test.d.cts → blur-test.react.d.cts} +0 -0
- /package/cjs/__tests__/{blur-test.d.ts → blur-test.react.d.ts} +0 -0
- /package/esm/__tests__/{blur-test.d.ts → blur-test.react.d.ts} +0 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
flushMicrotasks,
|
|
4
|
+
wrapAsync
|
|
5
|
+
} from "./HFG3HB6M.js";
|
|
6
|
+
|
|
7
|
+
// src/dispatch.ts
|
|
8
|
+
import { getKeys, invariant } from "@ariakit/core/utils/misc";
|
|
9
|
+
import { createEvent, fireEvent } from "@testing-library/dom";
|
|
10
|
+
function assignProps(obj, props) {
|
|
11
|
+
for (const [key, value] of Object.entries(props)) {
|
|
12
|
+
Object.defineProperty(obj, key, { get: () => value != null ? value : null });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function sanitizeNumber(n) {
|
|
16
|
+
return Number(n != null ? n : 0);
|
|
17
|
+
}
|
|
18
|
+
function initClipboardEvent(event, { clipboardData }) {
|
|
19
|
+
assignProps(event, {
|
|
20
|
+
clipboardData
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function initInputEvent(event, { data, inputType, isComposing }) {
|
|
24
|
+
assignProps(event, {
|
|
25
|
+
data,
|
|
26
|
+
isComposing: !!isComposing,
|
|
27
|
+
inputType: String(inputType)
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function initUIEvent(event, { view, detail }) {
|
|
31
|
+
assignProps(event, {
|
|
32
|
+
view,
|
|
33
|
+
detail: sanitizeNumber(detail != null ? detail : 0)
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function initUIEventModififiers(event, {
|
|
37
|
+
altKey,
|
|
38
|
+
ctrlKey,
|
|
39
|
+
metaKey,
|
|
40
|
+
shiftKey,
|
|
41
|
+
modifierAltGraph,
|
|
42
|
+
modifierCapsLock,
|
|
43
|
+
modifierFn,
|
|
44
|
+
modifierFnLock,
|
|
45
|
+
modifierNumLock,
|
|
46
|
+
modifierScrollLock,
|
|
47
|
+
modifierSymbol,
|
|
48
|
+
modifierSymbolLock
|
|
49
|
+
}) {
|
|
50
|
+
assignProps(event, {
|
|
51
|
+
altKey: !!altKey,
|
|
52
|
+
ctrlKey: !!ctrlKey,
|
|
53
|
+
metaKey: !!metaKey,
|
|
54
|
+
shiftKey: !!shiftKey,
|
|
55
|
+
getModifierState(k) {
|
|
56
|
+
return Boolean(
|
|
57
|
+
{
|
|
58
|
+
Alt: altKey,
|
|
59
|
+
AltGraph: modifierAltGraph,
|
|
60
|
+
CapsLock: modifierCapsLock,
|
|
61
|
+
Control: ctrlKey,
|
|
62
|
+
Fn: modifierFn,
|
|
63
|
+
FnLock: modifierFnLock,
|
|
64
|
+
Meta: metaKey,
|
|
65
|
+
NumLock: modifierNumLock,
|
|
66
|
+
ScrollLock: modifierScrollLock,
|
|
67
|
+
Shift: shiftKey,
|
|
68
|
+
Symbol: modifierSymbol,
|
|
69
|
+
SymbolLock: modifierSymbolLock
|
|
70
|
+
}[k]
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function initKeyboardEvent(event, { key, code, location, repeat, isComposing }) {
|
|
76
|
+
assignProps(event, {
|
|
77
|
+
key: String(key),
|
|
78
|
+
code: String(code),
|
|
79
|
+
location: sanitizeNumber(location),
|
|
80
|
+
repeat: !!repeat,
|
|
81
|
+
isComposing: !!isComposing
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function initMouseEvent(event, {
|
|
85
|
+
x,
|
|
86
|
+
y,
|
|
87
|
+
screenX,
|
|
88
|
+
screenY,
|
|
89
|
+
clientX = x,
|
|
90
|
+
clientY = y,
|
|
91
|
+
button,
|
|
92
|
+
buttons,
|
|
93
|
+
relatedTarget
|
|
94
|
+
}) {
|
|
95
|
+
assignProps(event, {
|
|
96
|
+
screenX: sanitizeNumber(screenX),
|
|
97
|
+
screenY: sanitizeNumber(screenY),
|
|
98
|
+
clientX: sanitizeNumber(clientX),
|
|
99
|
+
x: sanitizeNumber(clientX),
|
|
100
|
+
clientY: sanitizeNumber(clientY),
|
|
101
|
+
y: sanitizeNumber(clientY),
|
|
102
|
+
button: sanitizeNumber(button),
|
|
103
|
+
buttons: sanitizeNumber(buttons),
|
|
104
|
+
relatedTarget
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function initPointerEvent(event, {
|
|
108
|
+
pointerId,
|
|
109
|
+
width,
|
|
110
|
+
height,
|
|
111
|
+
pressure,
|
|
112
|
+
tangentialPressure,
|
|
113
|
+
tiltX,
|
|
114
|
+
tiltY,
|
|
115
|
+
twist,
|
|
116
|
+
isPrimary,
|
|
117
|
+
pointerType = "mouse"
|
|
118
|
+
}) {
|
|
119
|
+
assignProps(event, {
|
|
120
|
+
pointerId: sanitizeNumber(pointerId),
|
|
121
|
+
width: sanitizeNumber(width),
|
|
122
|
+
height: sanitizeNumber(height),
|
|
123
|
+
pressure: sanitizeNumber(pressure),
|
|
124
|
+
tangentialPressure: sanitizeNumber(tangentialPressure),
|
|
125
|
+
tiltX: sanitizeNumber(tiltX),
|
|
126
|
+
tiltY: sanitizeNumber(tiltY),
|
|
127
|
+
twist: sanitizeNumber(twist),
|
|
128
|
+
isPrimary: !!isPrimary,
|
|
129
|
+
pointerType: String(pointerType)
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
function initEvent(event, options = {}) {
|
|
133
|
+
if (event instanceof ClipboardEvent) {
|
|
134
|
+
initClipboardEvent(event, options);
|
|
135
|
+
}
|
|
136
|
+
if (event instanceof InputEvent) {
|
|
137
|
+
initInputEvent(event, options);
|
|
138
|
+
}
|
|
139
|
+
if (event instanceof UIEvent) {
|
|
140
|
+
initUIEvent(event, options);
|
|
141
|
+
}
|
|
142
|
+
if (event instanceof KeyboardEvent) {
|
|
143
|
+
initKeyboardEvent(event, options);
|
|
144
|
+
initUIEventModififiers(event, options);
|
|
145
|
+
}
|
|
146
|
+
if (event instanceof MouseEvent) {
|
|
147
|
+
initMouseEvent(event, options);
|
|
148
|
+
initUIEventModififiers(event, options);
|
|
149
|
+
}
|
|
150
|
+
if (event instanceof PointerEvent) {
|
|
151
|
+
initPointerEvent(event, options);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
var pointerEvents = [
|
|
155
|
+
"mousemove",
|
|
156
|
+
"mouseover",
|
|
157
|
+
"mouseenter",
|
|
158
|
+
"mouseout",
|
|
159
|
+
"mouseleave",
|
|
160
|
+
"mousedown",
|
|
161
|
+
"mouseup",
|
|
162
|
+
"pointermove",
|
|
163
|
+
"pointerover",
|
|
164
|
+
"pointerenter",
|
|
165
|
+
"pointerout",
|
|
166
|
+
"pointerleave",
|
|
167
|
+
"pointerdown",
|
|
168
|
+
"pointerup",
|
|
169
|
+
"click"
|
|
170
|
+
];
|
|
171
|
+
function baseDispatch(element, event) {
|
|
172
|
+
return wrapAsync(async () => {
|
|
173
|
+
invariant(element, `Unable to dispatch ${event.type} on null element`);
|
|
174
|
+
const eventName = event.type.toLowerCase();
|
|
175
|
+
if (pointerEvents.includes(eventName) && "classList" in element) {
|
|
176
|
+
const { pointerEvents: pointerEvents2 } = getComputedStyle(element);
|
|
177
|
+
if (pointerEvents2 === "none") {
|
|
178
|
+
if (element.parentElement) {
|
|
179
|
+
return baseDispatch(element.parentElement, event);
|
|
180
|
+
}
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const defaultAllowed = fireEvent(element, event);
|
|
185
|
+
await flushMicrotasks();
|
|
186
|
+
return defaultAllowed;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
var events = getKeys(fireEvent).reduce((events2, eventName) => {
|
|
190
|
+
events2[eventName] = (element, options) => {
|
|
191
|
+
invariant(element, `Unable to dispatch ${eventName} on null element`);
|
|
192
|
+
const event = createEvent[eventName](element, options);
|
|
193
|
+
initEvent(event, options);
|
|
194
|
+
return baseDispatch(element, event);
|
|
195
|
+
};
|
|
196
|
+
return events2;
|
|
197
|
+
}, {});
|
|
198
|
+
var dispatch = Object.assign(baseDispatch, events);
|
|
199
|
+
|
|
200
|
+
export {
|
|
201
|
+
dispatch
|
|
202
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
dispatch
|
|
4
|
+
} from "./LK25WCYN.js";
|
|
5
|
+
import {
|
|
6
|
+
wrapAsync
|
|
7
|
+
} from "./HFG3HB6M.js";
|
|
8
|
+
import {
|
|
9
|
+
__spreadValues
|
|
10
|
+
} from "./SM5ASDQ3.js";
|
|
11
|
+
|
|
12
|
+
// src/mouse-up.ts
|
|
13
|
+
import { isVisible } from "@ariakit/core/utils/dom";
|
|
14
|
+
import { invariant } from "@ariakit/core/utils/misc";
|
|
15
|
+
function mouseUp(element, options) {
|
|
16
|
+
return wrapAsync(async () => {
|
|
17
|
+
invariant(element, "Unable to mouseUp on null element");
|
|
18
|
+
if (!isVisible(element)) return;
|
|
19
|
+
const { disabled } = element;
|
|
20
|
+
await dispatch.pointerUp(element, options);
|
|
21
|
+
if (disabled) return;
|
|
22
|
+
await dispatch.mouseUp(element, __spreadValues({ detail: 1 }, options));
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
mouseUp
|
|
28
|
+
};
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
type
|
|
4
|
+
} from "./4VR4URFV.js";
|
|
5
|
+
import {
|
|
6
|
+
sleep
|
|
7
|
+
} from "./DZ24E43J.js";
|
|
8
|
+
import {
|
|
9
|
+
blur
|
|
10
|
+
} from "./SOWA2DKF.js";
|
|
11
|
+
import {
|
|
12
|
+
focus
|
|
13
|
+
} from "./4SG6SLGL.js";
|
|
14
|
+
import {
|
|
15
|
+
dispatch
|
|
16
|
+
} from "./LK25WCYN.js";
|
|
17
|
+
import {
|
|
18
|
+
wrapAsync
|
|
19
|
+
} from "./HFG3HB6M.js";
|
|
20
|
+
import {
|
|
21
|
+
__spreadValues
|
|
22
|
+
} from "./SM5ASDQ3.js";
|
|
23
|
+
|
|
24
|
+
// src/press.ts
|
|
25
|
+
import { isTextField, setSelectionRange } from "@ariakit/core/utils/dom";
|
|
26
|
+
import {
|
|
27
|
+
getNextTabbable,
|
|
28
|
+
getPreviousTabbable,
|
|
29
|
+
isFocusable
|
|
30
|
+
} from "@ariakit/core/utils/focus";
|
|
31
|
+
var clickableInputTypes = [
|
|
32
|
+
"button",
|
|
33
|
+
"color",
|
|
34
|
+
"file",
|
|
35
|
+
"image",
|
|
36
|
+
"reset",
|
|
37
|
+
"submit"
|
|
38
|
+
];
|
|
39
|
+
async function submitFormByPressingEnterOn(element, options) {
|
|
40
|
+
const { form } = element;
|
|
41
|
+
if (!form) return;
|
|
42
|
+
const elements = Array.from(form.elements);
|
|
43
|
+
const validInputs = elements.filter(
|
|
44
|
+
(el) => el instanceof HTMLInputElement && isTextField(el)
|
|
45
|
+
);
|
|
46
|
+
const submitButton = elements.find(
|
|
47
|
+
(el) => (el instanceof HTMLInputElement || el instanceof HTMLButtonElement) && el.type === "submit"
|
|
48
|
+
);
|
|
49
|
+
if (validInputs.length === 1 || submitButton) {
|
|
50
|
+
await dispatch.submit(form, options);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function isNumberInput(element) {
|
|
54
|
+
return element instanceof HTMLInputElement && element.type === "number";
|
|
55
|
+
}
|
|
56
|
+
async function incrementNumberInput(element, by = 1) {
|
|
57
|
+
const value = +element.value + by;
|
|
58
|
+
const max = element.max ? +element.max : Number.MAX_SAFE_INTEGER;
|
|
59
|
+
const min = element.min ? +element.min : Number.MIN_SAFE_INTEGER;
|
|
60
|
+
if (value > max || value < min) return;
|
|
61
|
+
element.value = value.toString();
|
|
62
|
+
await dispatch.input(element);
|
|
63
|
+
await dispatch.change(element);
|
|
64
|
+
}
|
|
65
|
+
var keyDownMap = {
|
|
66
|
+
async Tab(_, { shiftKey }) {
|
|
67
|
+
const nextElement = shiftKey ? getPreviousTabbable() : getNextTabbable();
|
|
68
|
+
if (nextElement) {
|
|
69
|
+
await focus(nextElement);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
async Enter(element, options) {
|
|
73
|
+
const nonSubmittableTypes = [...clickableInputTypes, "hidden"];
|
|
74
|
+
const isClickable = element.tagName === "BUTTON" || element instanceof HTMLInputElement && clickableInputTypes.includes(element.type);
|
|
75
|
+
const isSubmittable = element instanceof HTMLInputElement && !nonSubmittableTypes.includes(element.type);
|
|
76
|
+
if (isClickable) {
|
|
77
|
+
await dispatch.click(element, options);
|
|
78
|
+
} else if (isSubmittable) {
|
|
79
|
+
await submitFormByPressingEnterOn(element, options);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
async Home(element, { shiftKey }) {
|
|
83
|
+
if (isTextField(element)) {
|
|
84
|
+
const { value, selectionEnd } = element;
|
|
85
|
+
const end = Math.min(value.length, shiftKey ? selectionEnd != null ? selectionEnd : 0 : 0);
|
|
86
|
+
setSelectionRange(element, 0, end, "backward");
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
async End(element, { shiftKey }) {
|
|
90
|
+
if (isTextField(element)) {
|
|
91
|
+
const { value, selectionStart } = element;
|
|
92
|
+
const start = shiftKey ? selectionStart != null ? selectionStart : 0 : value.length;
|
|
93
|
+
setSelectionRange(element, start, value.length, "forward");
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
async ArrowLeft(element, { shiftKey }) {
|
|
97
|
+
if (isTextField(element)) {
|
|
98
|
+
const { value, selectionStart, selectionEnd, selectionDirection } = element;
|
|
99
|
+
const [start, end] = [selectionStart != null ? selectionStart : 0, selectionEnd != null ? selectionEnd : 0];
|
|
100
|
+
const collapsing = !shiftKey && start !== end;
|
|
101
|
+
const nextStart = Math.max(0, collapsing ? start : start - 1);
|
|
102
|
+
const nextEnd = Math.min(value.length, shiftKey ? end : nextStart);
|
|
103
|
+
setSelectionRange(
|
|
104
|
+
element,
|
|
105
|
+
nextStart,
|
|
106
|
+
nextEnd,
|
|
107
|
+
selectionDirection || "backward"
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
async ArrowRight(element, { shiftKey }) {
|
|
112
|
+
if (isTextField(element)) {
|
|
113
|
+
const { value, selectionStart, selectionEnd, selectionDirection } = element;
|
|
114
|
+
const [start, end] = [selectionStart != null ? selectionStart : 0, selectionEnd != null ? selectionEnd : 0];
|
|
115
|
+
const collapsing = !shiftKey && start !== end;
|
|
116
|
+
const nextEnd = Math.min(value.length, collapsing ? end : end + 1);
|
|
117
|
+
const nextStart = Math.max(0, shiftKey ? start : nextEnd);
|
|
118
|
+
setSelectionRange(
|
|
119
|
+
element,
|
|
120
|
+
nextStart,
|
|
121
|
+
nextEnd,
|
|
122
|
+
selectionDirection || "forward"
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
async ArrowUp(element, { shiftKey }) {
|
|
127
|
+
if (isTextField(element)) {
|
|
128
|
+
if (!shiftKey) {
|
|
129
|
+
return setSelectionRange(element, 0, 0);
|
|
130
|
+
}
|
|
131
|
+
const { selectionStart, selectionEnd, selectionDirection } = element;
|
|
132
|
+
const [start, end] = [selectionStart != null ? selectionStart : 0, selectionEnd != null ? selectionEnd : 0];
|
|
133
|
+
if (selectionDirection === "forward") {
|
|
134
|
+
setSelectionRange(element, start, start);
|
|
135
|
+
} else {
|
|
136
|
+
setSelectionRange(element, 0, end, "backward");
|
|
137
|
+
}
|
|
138
|
+
} else if (isNumberInput(element)) {
|
|
139
|
+
await incrementNumberInput(element);
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
async ArrowDown(element, { shiftKey }) {
|
|
143
|
+
if (isTextField(element)) {
|
|
144
|
+
const length = element.value.length;
|
|
145
|
+
if (!shiftKey) {
|
|
146
|
+
setSelectionRange(element, length, length);
|
|
147
|
+
} else {
|
|
148
|
+
const { selectionStart, selectionEnd, selectionDirection } = element;
|
|
149
|
+
const [start, end] = [selectionStart != null ? selectionStart : 0, selectionEnd != null ? selectionEnd : 0];
|
|
150
|
+
if (selectionDirection === "backward") {
|
|
151
|
+
setSelectionRange(element, end, end);
|
|
152
|
+
} else {
|
|
153
|
+
setSelectionRange(element, start, length, "forward");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} else if (isNumberInput(element)) {
|
|
157
|
+
await incrementNumberInput(element, -1);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
var keyUpMap = {
|
|
162
|
+
// Space
|
|
163
|
+
" ": async (element, options) => {
|
|
164
|
+
const spaceableTypes = [...clickableInputTypes, "checkbox", "radio"];
|
|
165
|
+
const isSpaceable = element.tagName === "BUTTON" || element instanceof HTMLInputElement && spaceableTypes.includes(element.type);
|
|
166
|
+
if (isSpaceable) {
|
|
167
|
+
await dispatch.click(element, options);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
function press(key, element, options = {}) {
|
|
172
|
+
return wrapAsync(async () => {
|
|
173
|
+
var _a, _b, _c, _d;
|
|
174
|
+
if (element == null) {
|
|
175
|
+
element = document.activeElement || document.body;
|
|
176
|
+
}
|
|
177
|
+
if (!element) return;
|
|
178
|
+
if (!isFocusable(element) && element.tagName !== "BODY") return;
|
|
179
|
+
if (isTextField(element)) {
|
|
180
|
+
if (key.length === 1) {
|
|
181
|
+
return type(key, element, options);
|
|
182
|
+
} else if (key === "Delete") {
|
|
183
|
+
return type("\x7F", element, options);
|
|
184
|
+
} else if (key === "Backspace") {
|
|
185
|
+
return type("\b", element, options);
|
|
186
|
+
} else if (key === "Enter" && element.tagName === "TEXTAREA") {
|
|
187
|
+
return type("\n", element, options);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (((_a = element.ownerDocument) == null ? void 0 : _a.activeElement) !== element) {
|
|
191
|
+
if (element.tagName === "BODY") {
|
|
192
|
+
await blur();
|
|
193
|
+
} else {
|
|
194
|
+
await focus(element);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
await sleep();
|
|
198
|
+
let defaultAllowed = await dispatch.keyDown(element, __spreadValues({ key }, options));
|
|
199
|
+
if (defaultAllowed && key in keyDownMap && !options.metaKey) {
|
|
200
|
+
await ((_b = keyDownMap[key]) == null ? void 0 : _b.call(keyDownMap, element, options));
|
|
201
|
+
}
|
|
202
|
+
await sleep();
|
|
203
|
+
if (((_c = element.ownerDocument) == null ? void 0 : _c.activeElement) !== element) {
|
|
204
|
+
element = element.ownerDocument.activeElement;
|
|
205
|
+
}
|
|
206
|
+
if (!await dispatch.keyUp(element, __spreadValues({ key }, options))) {
|
|
207
|
+
defaultAllowed = false;
|
|
208
|
+
}
|
|
209
|
+
if (defaultAllowed && key in keyUpMap && !options.metaKey) {
|
|
210
|
+
await ((_d = keyUpMap[key]) == null ? void 0 : _d.call(keyUpMap, element, options));
|
|
211
|
+
}
|
|
212
|
+
await sleep();
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function createPress(key, defaultOptions = {}) {
|
|
216
|
+
return (element, options = {}) => press(key, element, __spreadValues(__spreadValues({}, defaultOptions), options));
|
|
217
|
+
}
|
|
218
|
+
press.Escape = createPress("Escape");
|
|
219
|
+
press.Backspace = createPress("Backspace");
|
|
220
|
+
press.Delete = createPress("Delete");
|
|
221
|
+
press.Tab = createPress("Tab");
|
|
222
|
+
press.ShiftTab = createPress("Tab", { shiftKey: true });
|
|
223
|
+
press.Enter = createPress("Enter");
|
|
224
|
+
press.Space = createPress(" ");
|
|
225
|
+
press.ArrowUp = createPress("ArrowUp");
|
|
226
|
+
press.ArrowRight = createPress("ArrowRight");
|
|
227
|
+
press.ArrowDown = createPress("ArrowDown");
|
|
228
|
+
press.ArrowLeft = createPress("ArrowLeft");
|
|
229
|
+
press.End = createPress("End");
|
|
230
|
+
press.Home = createPress("Home");
|
|
231
|
+
press.PageUp = createPress("PageUp");
|
|
232
|
+
press.PageDown = createPress("PageDown");
|
|
233
|
+
|
|
234
|
+
export {
|
|
235
|
+
press
|
|
236
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
hover
|
|
4
|
+
} from "./BG5U5JFH.js";
|
|
5
|
+
import {
|
|
6
|
+
sleep
|
|
7
|
+
} from "./DZ24E43J.js";
|
|
8
|
+
import {
|
|
9
|
+
mouseDown
|
|
10
|
+
} from "./Z7WVAAXJ.js";
|
|
11
|
+
import {
|
|
12
|
+
focus
|
|
13
|
+
} from "./4SG6SLGL.js";
|
|
14
|
+
import {
|
|
15
|
+
mouseUp
|
|
16
|
+
} from "./NR24PD4G.js";
|
|
17
|
+
import {
|
|
18
|
+
dispatch
|
|
19
|
+
} from "./LK25WCYN.js";
|
|
20
|
+
import {
|
|
21
|
+
wrapAsync
|
|
22
|
+
} from "./HFG3HB6M.js";
|
|
23
|
+
import {
|
|
24
|
+
__spreadValues
|
|
25
|
+
} from "./SM5ASDQ3.js";
|
|
26
|
+
|
|
27
|
+
// src/click.ts
|
|
28
|
+
import { isVisible } from "@ariakit/core/utils/dom";
|
|
29
|
+
import { isFocusable } from "@ariakit/core/utils/focus";
|
|
30
|
+
import { invariant } from "@ariakit/core/utils/misc";
|
|
31
|
+
function getClosestLabel(element) {
|
|
32
|
+
if (!isFocusable(element)) {
|
|
33
|
+
return element.closest("label");
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function getInputFromLabel(element) {
|
|
38
|
+
var _a;
|
|
39
|
+
const input = element.htmlFor ? (_a = element.ownerDocument) == null ? void 0 : _a.getElementById(element.htmlFor) : element.querySelector("input,textarea,select");
|
|
40
|
+
return input;
|
|
41
|
+
}
|
|
42
|
+
async function clickLabel(element, options) {
|
|
43
|
+
const input = getInputFromLabel(element);
|
|
44
|
+
const isInputDisabled = Boolean(input == null ? void 0 : input.disabled);
|
|
45
|
+
if (input) {
|
|
46
|
+
input.disabled = true;
|
|
47
|
+
}
|
|
48
|
+
const defaultAllowed = await dispatch.click(element, options);
|
|
49
|
+
if (input) {
|
|
50
|
+
input.disabled = isInputDisabled;
|
|
51
|
+
if (defaultAllowed && isFocusable(input)) {
|
|
52
|
+
await focus(input);
|
|
53
|
+
await dispatch.click(input);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function setSelected(element, selected) {
|
|
58
|
+
element.setAttribute("selected", selected ? "selected" : "");
|
|
59
|
+
element.selected = selected;
|
|
60
|
+
}
|
|
61
|
+
async function clickOption(element, eventOptions) {
|
|
62
|
+
const select = element.closest("select");
|
|
63
|
+
if (!select) {
|
|
64
|
+
await dispatch.click(element, eventOptions);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (select.multiple) {
|
|
68
|
+
const options = Array.from(select.options);
|
|
69
|
+
const resetOptions = () => {
|
|
70
|
+
for (const option of options) {
|
|
71
|
+
setSelected(option, false);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const selectRange = (a, b) => {
|
|
75
|
+
const from = Math.min(a, b);
|
|
76
|
+
const to = Math.max(a, b) + 1;
|
|
77
|
+
const selectedOptions = options.slice(from, to);
|
|
78
|
+
for (const option of selectedOptions) {
|
|
79
|
+
setSelected(option, true);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
if (eventOptions == null ? void 0 : eventOptions.shiftKey) {
|
|
83
|
+
const elementIndex = options.indexOf(element);
|
|
84
|
+
const referenceOption = select.lastOptionSelectedNotByShiftKey;
|
|
85
|
+
const referenceOptionIndex = referenceOption ? options.indexOf(referenceOption) : -1;
|
|
86
|
+
resetOptions();
|
|
87
|
+
selectRange(elementIndex, referenceOptionIndex);
|
|
88
|
+
setSelected(element, true);
|
|
89
|
+
} else {
|
|
90
|
+
select.lastOptionSelectedNotByShiftKey = element;
|
|
91
|
+
if (eventOptions == null ? void 0 : eventOptions.ctrlKey) {
|
|
92
|
+
setSelected(element, !element.selected);
|
|
93
|
+
} else {
|
|
94
|
+
resetOptions();
|
|
95
|
+
setSelected(element, true);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
} else {
|
|
99
|
+
setSelected(element, true);
|
|
100
|
+
}
|
|
101
|
+
await dispatch.input(select);
|
|
102
|
+
await dispatch.change(select);
|
|
103
|
+
await dispatch.click(element, eventOptions);
|
|
104
|
+
}
|
|
105
|
+
function click(element, options, tap = false) {
|
|
106
|
+
return wrapAsync(async () => {
|
|
107
|
+
invariant(element, "Unable to click on null element");
|
|
108
|
+
if (!isVisible(element)) return;
|
|
109
|
+
await hover(element, options);
|
|
110
|
+
await mouseDown(element, options);
|
|
111
|
+
while (!isVisible(element)) {
|
|
112
|
+
if (!element.parentElement) return;
|
|
113
|
+
element = element.parentElement;
|
|
114
|
+
}
|
|
115
|
+
if (!tap) {
|
|
116
|
+
await sleep();
|
|
117
|
+
}
|
|
118
|
+
await mouseUp(element, options);
|
|
119
|
+
const { disabled } = element;
|
|
120
|
+
if (disabled) return;
|
|
121
|
+
const label = getClosestLabel(element);
|
|
122
|
+
if (label) {
|
|
123
|
+
await clickLabel(label, __spreadValues({ detail: 1 }, options));
|
|
124
|
+
} else if (element instanceof HTMLOptionElement) {
|
|
125
|
+
await clickOption(element, __spreadValues({ detail: 1 }, options));
|
|
126
|
+
} else {
|
|
127
|
+
await dispatch.click(element, __spreadValues({ detail: 1 }, options));
|
|
128
|
+
}
|
|
129
|
+
await sleep();
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export {
|
|
134
|
+
click
|
|
135
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
wrapAsync
|
|
4
|
+
} from "./HFG3HB6M.js";
|
|
5
|
+
|
|
6
|
+
// src/wait-for.ts
|
|
7
|
+
import * as DOMTestingLibrary from "@testing-library/dom";
|
|
8
|
+
function waitFor2(callback, options) {
|
|
9
|
+
return wrapAsync(() => DOMTestingLibrary.waitFor(callback, options));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
waitFor2 as waitFor
|
|
14
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __spreadValues = (a, b) => {
|
|
10
|
+
for (var prop in b || (b = {}))
|
|
11
|
+
if (__hasOwnProp.call(b, prop))
|
|
12
|
+
__defNormalProp(a, prop, b[prop]);
|
|
13
|
+
if (__getOwnPropSymbols)
|
|
14
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
+
if (__propIsEnum.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
}
|
|
18
|
+
return a;
|
|
19
|
+
};
|
|
20
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
__spreadValues,
|
|
24
|
+
__spreadProps
|
|
25
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
dispatch
|
|
4
|
+
} from "./LK25WCYN.js";
|
|
5
|
+
import {
|
|
6
|
+
flushMicrotasks,
|
|
7
|
+
wrapAsync
|
|
8
|
+
} from "./HFG3HB6M.js";
|
|
9
|
+
|
|
10
|
+
// src/blur.ts
|
|
11
|
+
import { getActiveElement } from "@ariakit/core/utils/dom";
|
|
12
|
+
function blur(element) {
|
|
13
|
+
return wrapAsync(async () => {
|
|
14
|
+
if (element == null) {
|
|
15
|
+
element = document.activeElement;
|
|
16
|
+
}
|
|
17
|
+
if (!element) return;
|
|
18
|
+
if (element.tagName === "BODY") return;
|
|
19
|
+
if (getActiveElement(element) !== element) return;
|
|
20
|
+
if (element.dirty) {
|
|
21
|
+
await dispatch.change(element);
|
|
22
|
+
element.dirty = false;
|
|
23
|
+
}
|
|
24
|
+
if (element instanceof HTMLElement || element instanceof SVGElement) {
|
|
25
|
+
element.blur();
|
|
26
|
+
await flushMicrotasks();
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
blur
|
|
33
|
+
};
|