@gjsify/dom-events 0.0.4 → 0.1.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.
- package/README.md +30 -1
- package/globals.mjs +7 -0
- package/lib/esm/index.js +488 -1
- package/lib/types/index.d.ts +307 -1
- package/package.json +18 -24
- package/src/error-handler.spec.ts +2 -2
- package/src/event-target.spec.ts +2 -2
- package/src/event.spec.ts +3 -2
- package/src/index.ts +642 -1
- package/src/test.mts +2 -1
- package/src/ui-events.spec.ts +312 -0
- package/tsconfig.json +20 -7
- package/tsconfig.tsbuildinfo +1 -0
- package/lib/cjs/index.js +0 -1
- package/test.gjs.js +0 -34758
- package/test.gjs.js.map +0 -7
- package/test.gjs.mjs +0 -35685
- package/test.node.js +0 -1226
- package/test.node.js.map +0 -7
- package/test.node.mjs +0 -9879
- package/tsconfig.types.json +0 -8
- package/tsconfig.types.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
# @gjsify/dom-events
|
|
2
2
|
|
|
3
|
+
GJS implementation of Web DOM Events including Event, CustomEvent, EventTarget, UIEvent, MouseEvent, PointerEvent, KeyboardEvent, WheelEvent, FocusEvent, and DOMException.
|
|
4
|
+
|
|
5
|
+
Part of the [gjsify](https://github.com/gjsify/gjsify) project — Node.js and Web APIs for GJS (GNOME JavaScript).
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @gjsify/dom-events
|
|
11
|
+
# or
|
|
12
|
+
yarn add @gjsify/dom-events
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { Event, CustomEvent, EventTarget } from '@gjsify/dom-events';
|
|
19
|
+
|
|
20
|
+
const target = new EventTarget();
|
|
21
|
+
target.addEventListener('custom', (e) => {
|
|
22
|
+
console.log(e.detail);
|
|
23
|
+
});
|
|
24
|
+
target.dispatchEvent(new CustomEvent('custom', { detail: 'hello' }));
|
|
25
|
+
```
|
|
26
|
+
|
|
3
27
|
## Inspirations and credits
|
|
28
|
+
|
|
4
29
|
- https://deno.land/manual@v1.29.2/runtime/web_platform_apis#customevent-eventtarget-and-eventlistener
|
|
5
30
|
- https://github.com/jsdom/jsdom/tree/master/lib/jsdom/living/events
|
|
6
|
-
- https://github.com/capricorn86/happy-dom/tree/master/packages/happy-dom/src/event
|
|
31
|
+
- https://github.com/capricorn86/happy-dom/tree/master/packages/happy-dom/src/event
|
|
32
|
+
|
|
33
|
+
## License
|
|
34
|
+
|
|
35
|
+
MIT
|
package/globals.mjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-exports native DOM Events globals for use in Node.js builds.
|
|
3
|
+
* On Node.js, Event/EventTarget/CustomEvent are native globals.
|
|
4
|
+
*/
|
|
5
|
+
export const Event = globalThis.Event;
|
|
6
|
+
export const EventTarget = globalThis.EventTarget;
|
|
7
|
+
export const CustomEvent = globalThis.CustomEvent;
|
package/lib/esm/index.js
CHANGED
|
@@ -1 +1,488 @@
|
|
|
1
|
-
|
|
1
|
+
import { DOMException } from "@gjsify/dom-exception";
|
|
2
|
+
const kType = /* @__PURE__ */ Symbol("type");
|
|
3
|
+
const kBubbles = /* @__PURE__ */ Symbol("bubbles");
|
|
4
|
+
const kCancelable = /* @__PURE__ */ Symbol("cancelable");
|
|
5
|
+
const kComposed = /* @__PURE__ */ Symbol("composed");
|
|
6
|
+
const kTarget = /* @__PURE__ */ Symbol("target");
|
|
7
|
+
const kCurrentTarget = /* @__PURE__ */ Symbol("currentTarget");
|
|
8
|
+
const kEventPhase = /* @__PURE__ */ Symbol("eventPhase");
|
|
9
|
+
const kDefaultPrevented = /* @__PURE__ */ Symbol("defaultPrevented");
|
|
10
|
+
const kIsTrusted = /* @__PURE__ */ Symbol("isTrusted");
|
|
11
|
+
const kTimeStamp = /* @__PURE__ */ Symbol("timeStamp");
|
|
12
|
+
const kStop = /* @__PURE__ */ Symbol("stop");
|
|
13
|
+
const kImmediateStop = /* @__PURE__ */ Symbol("immediateStop");
|
|
14
|
+
const kDispatching = /* @__PURE__ */ Symbol("dispatching");
|
|
15
|
+
const kInPassiveListener = /* @__PURE__ */ Symbol("inPassiveListener");
|
|
16
|
+
class Event {
|
|
17
|
+
// Internal state
|
|
18
|
+
[kType];
|
|
19
|
+
[kBubbles];
|
|
20
|
+
[kCancelable];
|
|
21
|
+
[kComposed];
|
|
22
|
+
[kTarget] = null;
|
|
23
|
+
[kCurrentTarget] = null;
|
|
24
|
+
[kEventPhase] = 0;
|
|
25
|
+
[kDefaultPrevented] = false;
|
|
26
|
+
[kIsTrusted] = false;
|
|
27
|
+
[kTimeStamp];
|
|
28
|
+
[kStop] = false;
|
|
29
|
+
[kImmediateStop] = false;
|
|
30
|
+
[kDispatching] = false;
|
|
31
|
+
[kInPassiveListener] = false;
|
|
32
|
+
// Readonly getters
|
|
33
|
+
get type() {
|
|
34
|
+
return this[kType];
|
|
35
|
+
}
|
|
36
|
+
get bubbles() {
|
|
37
|
+
return this[kBubbles];
|
|
38
|
+
}
|
|
39
|
+
get cancelable() {
|
|
40
|
+
return this[kCancelable];
|
|
41
|
+
}
|
|
42
|
+
get composed() {
|
|
43
|
+
return this[kComposed];
|
|
44
|
+
}
|
|
45
|
+
get target() {
|
|
46
|
+
return this[kTarget];
|
|
47
|
+
}
|
|
48
|
+
get currentTarget() {
|
|
49
|
+
return this[kCurrentTarget];
|
|
50
|
+
}
|
|
51
|
+
get eventPhase() {
|
|
52
|
+
return this[kEventPhase];
|
|
53
|
+
}
|
|
54
|
+
get defaultPrevented() {
|
|
55
|
+
return this[kDefaultPrevented];
|
|
56
|
+
}
|
|
57
|
+
// isTrusted is defined as a non-configurable own property in the constructor
|
|
58
|
+
get timeStamp() {
|
|
59
|
+
return this[kTimeStamp];
|
|
60
|
+
}
|
|
61
|
+
// Legacy compat
|
|
62
|
+
get cancelBubble() {
|
|
63
|
+
return this[kStop];
|
|
64
|
+
}
|
|
65
|
+
set cancelBubble(value) {
|
|
66
|
+
if (value) this.stopPropagation();
|
|
67
|
+
}
|
|
68
|
+
get returnValue() {
|
|
69
|
+
return !this[kDefaultPrevented];
|
|
70
|
+
}
|
|
71
|
+
set returnValue(value) {
|
|
72
|
+
if (!value) this.preventDefault();
|
|
73
|
+
}
|
|
74
|
+
get srcElement() {
|
|
75
|
+
return this[kTarget];
|
|
76
|
+
}
|
|
77
|
+
// Phase constants (defined as non-writable, non-configurable on prototype below)
|
|
78
|
+
static NONE = 0;
|
|
79
|
+
static CAPTURING_PHASE = 1;
|
|
80
|
+
static AT_TARGET = 2;
|
|
81
|
+
static BUBBLING_PHASE = 3;
|
|
82
|
+
get [Symbol.toStringTag]() {
|
|
83
|
+
return "Event";
|
|
84
|
+
}
|
|
85
|
+
constructor(type, eventInitDict) {
|
|
86
|
+
this[kType] = type;
|
|
87
|
+
this[kBubbles] = eventInitDict?.bubbles ?? false;
|
|
88
|
+
this[kCancelable] = eventInitDict?.cancelable ?? false;
|
|
89
|
+
this[kComposed] = eventInitDict?.composed ?? false;
|
|
90
|
+
this[kTimeStamp] = Date.now();
|
|
91
|
+
Object.defineProperty(this, "isTrusted", {
|
|
92
|
+
get: () => this[kIsTrusted],
|
|
93
|
+
enumerable: true,
|
|
94
|
+
configurable: false
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
composedPath() {
|
|
98
|
+
if (this[kCurrentTarget]) return [this[kCurrentTarget]];
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
preventDefault() {
|
|
102
|
+
if (this[kCancelable] && !this[kInPassiveListener]) {
|
|
103
|
+
this[kDefaultPrevented] = true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
stopPropagation() {
|
|
107
|
+
this[kStop] = true;
|
|
108
|
+
}
|
|
109
|
+
stopImmediatePropagation() {
|
|
110
|
+
this[kStop] = true;
|
|
111
|
+
this[kImmediateStop] = true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
class CustomEvent extends Event {
|
|
115
|
+
detail;
|
|
116
|
+
constructor(type, eventInitDict) {
|
|
117
|
+
super(type, eventInitDict);
|
|
118
|
+
this.detail = eventInitDict?.detail;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
class MessageEvent extends Event {
|
|
122
|
+
data;
|
|
123
|
+
origin;
|
|
124
|
+
lastEventId;
|
|
125
|
+
source;
|
|
126
|
+
ports;
|
|
127
|
+
constructor(type, eventInitDict) {
|
|
128
|
+
super(type, eventInitDict);
|
|
129
|
+
this.data = eventInitDict?.data ?? null;
|
|
130
|
+
this.origin = eventInitDict?.origin ?? "";
|
|
131
|
+
this.lastEventId = eventInitDict?.lastEventId ?? "";
|
|
132
|
+
this.source = eventInitDict?.source ?? null;
|
|
133
|
+
this.ports = eventInitDict?.ports ?? [];
|
|
134
|
+
}
|
|
135
|
+
get [Symbol.toStringTag]() {
|
|
136
|
+
return "MessageEvent";
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
class ErrorEvent extends Event {
|
|
140
|
+
message;
|
|
141
|
+
filename;
|
|
142
|
+
lineno;
|
|
143
|
+
colno;
|
|
144
|
+
error;
|
|
145
|
+
constructor(type, eventInitDict) {
|
|
146
|
+
super(type, eventInitDict);
|
|
147
|
+
this.message = eventInitDict?.message ?? "";
|
|
148
|
+
this.filename = eventInitDict?.filename ?? "";
|
|
149
|
+
this.lineno = eventInitDict?.lineno ?? 0;
|
|
150
|
+
this.colno = eventInitDict?.colno ?? 0;
|
|
151
|
+
this.error = eventInitDict?.error ?? null;
|
|
152
|
+
}
|
|
153
|
+
get [Symbol.toStringTag]() {
|
|
154
|
+
return "ErrorEvent";
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
class CloseEvent extends Event {
|
|
158
|
+
code;
|
|
159
|
+
reason;
|
|
160
|
+
wasClean;
|
|
161
|
+
constructor(type, eventInitDict) {
|
|
162
|
+
super(type, eventInitDict);
|
|
163
|
+
this.code = eventInitDict?.code ?? 0;
|
|
164
|
+
this.reason = eventInitDict?.reason ?? "";
|
|
165
|
+
this.wasClean = eventInitDict?.wasClean ?? false;
|
|
166
|
+
}
|
|
167
|
+
get [Symbol.toStringTag]() {
|
|
168
|
+
return "CloseEvent";
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
class ProgressEvent extends Event {
|
|
172
|
+
lengthComputable;
|
|
173
|
+
loaded;
|
|
174
|
+
total;
|
|
175
|
+
constructor(type, eventInitDict) {
|
|
176
|
+
super(type, eventInitDict);
|
|
177
|
+
this.lengthComputable = eventInitDict?.lengthComputable ?? false;
|
|
178
|
+
this.loaded = eventInitDict?.loaded ?? 0;
|
|
179
|
+
this.total = eventInitDict?.total ?? 0;
|
|
180
|
+
}
|
|
181
|
+
get [Symbol.toStringTag]() {
|
|
182
|
+
return "ProgressEvent";
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
class EventTarget {
|
|
186
|
+
_listeners = /* @__PURE__ */ new Map();
|
|
187
|
+
get [Symbol.toStringTag]() {
|
|
188
|
+
return "EventTarget";
|
|
189
|
+
}
|
|
190
|
+
addEventListener(type, callback, options) {
|
|
191
|
+
if (callback === null) return;
|
|
192
|
+
const capture = typeof options === "boolean" ? options : options?.capture ?? false;
|
|
193
|
+
const once = typeof options === "object" ? options?.once ?? false : false;
|
|
194
|
+
const passive = typeof options === "object" ? options?.passive ?? false : false;
|
|
195
|
+
let list = this._listeners.get(type);
|
|
196
|
+
if (!list) {
|
|
197
|
+
list = [];
|
|
198
|
+
this._listeners.set(type, list);
|
|
199
|
+
}
|
|
200
|
+
for (const entry2 of list) {
|
|
201
|
+
if (entry2.listener === callback && entry2.capture === capture) return;
|
|
202
|
+
}
|
|
203
|
+
const entry = { listener: callback, capture, once, passive, removed: false };
|
|
204
|
+
list.push(entry);
|
|
205
|
+
if (typeof options === "object" && options?.signal) {
|
|
206
|
+
options.signal.addEventListener("abort", () => {
|
|
207
|
+
this.removeEventListener(type, callback, { capture });
|
|
208
|
+
}, { once: true });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
removeEventListener(type, callback, options) {
|
|
212
|
+
if (callback === null) return;
|
|
213
|
+
const capture = typeof options === "boolean" ? options : options?.capture ?? false;
|
|
214
|
+
const list = this._listeners.get(type);
|
|
215
|
+
if (!list) return;
|
|
216
|
+
const idx = list.findIndex((e) => e.listener === callback && e.capture === capture);
|
|
217
|
+
if (idx !== -1) {
|
|
218
|
+
list[idx].removed = true;
|
|
219
|
+
list.splice(idx, 1);
|
|
220
|
+
if (list.length === 0) this._listeners.delete(type);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
dispatchEvent(event) {
|
|
224
|
+
if (event[kDispatching]) {
|
|
225
|
+
throw new DOMException("The event is already being dispatched.", "InvalidStateError");
|
|
226
|
+
}
|
|
227
|
+
event[kDispatching] = true;
|
|
228
|
+
event[kTarget] = this;
|
|
229
|
+
event[kCurrentTarget] = this;
|
|
230
|
+
event[kEventPhase] = Event.AT_TARGET;
|
|
231
|
+
const list = this._listeners.get(event.type);
|
|
232
|
+
if (list) {
|
|
233
|
+
const entries = [...list];
|
|
234
|
+
for (const entry of entries) {
|
|
235
|
+
if (entry.removed) continue;
|
|
236
|
+
if (event[kImmediateStop]) break;
|
|
237
|
+
if (event[kStop]) break;
|
|
238
|
+
if (entry.once) {
|
|
239
|
+
this.removeEventListener(event.type, entry.listener, { capture: entry.capture });
|
|
240
|
+
}
|
|
241
|
+
try {
|
|
242
|
+
if (entry.passive) event[kInPassiveListener] = true;
|
|
243
|
+
if (typeof entry.listener === "function") {
|
|
244
|
+
entry.listener.call(this, event);
|
|
245
|
+
} else if (typeof entry.listener.handleEvent === "function") {
|
|
246
|
+
entry.listener.handleEvent.call(entry.listener, event);
|
|
247
|
+
}
|
|
248
|
+
} catch (err) {
|
|
249
|
+
console.error(err);
|
|
250
|
+
} finally {
|
|
251
|
+
event[kInPassiveListener] = false;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
event[kEventPhase] = Event.NONE;
|
|
256
|
+
event[kCurrentTarget] = null;
|
|
257
|
+
event[kDispatching] = false;
|
|
258
|
+
return !event.defaultPrevented;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
for (const [name, value] of [["NONE", 0], ["CAPTURING_PHASE", 1], ["AT_TARGET", 2], ["BUBBLING_PHASE", 3]]) {
|
|
262
|
+
Object.defineProperty(Event.prototype, name, { value, writable: false, enumerable: true, configurable: false });
|
|
263
|
+
Object.defineProperty(Event, name, { value, writable: false, enumerable: true, configurable: false });
|
|
264
|
+
}
|
|
265
|
+
class UIEvent extends Event {
|
|
266
|
+
detail;
|
|
267
|
+
view;
|
|
268
|
+
constructor(type, eventInitDict) {
|
|
269
|
+
super(type, eventInitDict);
|
|
270
|
+
this.detail = eventInitDict?.detail ?? 0;
|
|
271
|
+
this.view = null;
|
|
272
|
+
}
|
|
273
|
+
get [Symbol.toStringTag]() {
|
|
274
|
+
return "UIEvent";
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
class MouseEvent extends UIEvent {
|
|
278
|
+
altKey;
|
|
279
|
+
button;
|
|
280
|
+
buttons;
|
|
281
|
+
clientX;
|
|
282
|
+
clientY;
|
|
283
|
+
ctrlKey;
|
|
284
|
+
metaKey;
|
|
285
|
+
movementX;
|
|
286
|
+
movementY;
|
|
287
|
+
offsetX;
|
|
288
|
+
offsetY;
|
|
289
|
+
screenX;
|
|
290
|
+
screenY;
|
|
291
|
+
shiftKey;
|
|
292
|
+
relatedTarget;
|
|
293
|
+
// Legacy aliases
|
|
294
|
+
get pageX() {
|
|
295
|
+
return this.clientX;
|
|
296
|
+
}
|
|
297
|
+
get pageY() {
|
|
298
|
+
return this.clientY;
|
|
299
|
+
}
|
|
300
|
+
get x() {
|
|
301
|
+
return this.clientX;
|
|
302
|
+
}
|
|
303
|
+
get y() {
|
|
304
|
+
return this.clientY;
|
|
305
|
+
}
|
|
306
|
+
constructor(type, eventInitDict) {
|
|
307
|
+
super(type, eventInitDict);
|
|
308
|
+
this.altKey = eventInitDict?.altKey ?? false;
|
|
309
|
+
this.button = eventInitDict?.button ?? 0;
|
|
310
|
+
this.buttons = eventInitDict?.buttons ?? 0;
|
|
311
|
+
this.clientX = eventInitDict?.clientX ?? 0;
|
|
312
|
+
this.clientY = eventInitDict?.clientY ?? 0;
|
|
313
|
+
this.ctrlKey = eventInitDict?.ctrlKey ?? false;
|
|
314
|
+
this.metaKey = eventInitDict?.metaKey ?? false;
|
|
315
|
+
this.movementX = eventInitDict?.movementX ?? 0;
|
|
316
|
+
this.movementY = eventInitDict?.movementY ?? 0;
|
|
317
|
+
this.offsetX = eventInitDict?.offsetX ?? 0;
|
|
318
|
+
this.offsetY = eventInitDict?.offsetY ?? 0;
|
|
319
|
+
this.screenX = eventInitDict?.screenX ?? 0;
|
|
320
|
+
this.screenY = eventInitDict?.screenY ?? 0;
|
|
321
|
+
this.shiftKey = eventInitDict?.shiftKey ?? false;
|
|
322
|
+
this.relatedTarget = eventInitDict?.relatedTarget ?? null;
|
|
323
|
+
}
|
|
324
|
+
getModifierState(key) {
|
|
325
|
+
switch (key) {
|
|
326
|
+
case "Alt":
|
|
327
|
+
return this.altKey;
|
|
328
|
+
case "Control":
|
|
329
|
+
return this.ctrlKey;
|
|
330
|
+
case "Meta":
|
|
331
|
+
return this.metaKey;
|
|
332
|
+
case "Shift":
|
|
333
|
+
return this.shiftKey;
|
|
334
|
+
default:
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
get [Symbol.toStringTag]() {
|
|
339
|
+
return "MouseEvent";
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
class PointerEvent extends MouseEvent {
|
|
343
|
+
pointerId;
|
|
344
|
+
width;
|
|
345
|
+
height;
|
|
346
|
+
pressure;
|
|
347
|
+
tangentialPressure;
|
|
348
|
+
tiltX;
|
|
349
|
+
tiltY;
|
|
350
|
+
twist;
|
|
351
|
+
altitudeAngle;
|
|
352
|
+
azimuthAngle;
|
|
353
|
+
pointerType;
|
|
354
|
+
isPrimary;
|
|
355
|
+
constructor(type, eventInitDict) {
|
|
356
|
+
super(type, eventInitDict);
|
|
357
|
+
this.pointerId = eventInitDict?.pointerId ?? 0;
|
|
358
|
+
this.width = eventInitDict?.width ?? 1;
|
|
359
|
+
this.height = eventInitDict?.height ?? 1;
|
|
360
|
+
this.pressure = eventInitDict?.pressure ?? 0;
|
|
361
|
+
this.tangentialPressure = eventInitDict?.tangentialPressure ?? 0;
|
|
362
|
+
this.tiltX = eventInitDict?.tiltX ?? 0;
|
|
363
|
+
this.tiltY = eventInitDict?.tiltY ?? 0;
|
|
364
|
+
this.twist = eventInitDict?.twist ?? 0;
|
|
365
|
+
this.altitudeAngle = eventInitDict?.altitudeAngle ?? Math.PI / 2;
|
|
366
|
+
this.azimuthAngle = eventInitDict?.azimuthAngle ?? 0;
|
|
367
|
+
this.pointerType = eventInitDict?.pointerType ?? "";
|
|
368
|
+
this.isPrimary = eventInitDict?.isPrimary ?? false;
|
|
369
|
+
}
|
|
370
|
+
getCoalescedEvents() {
|
|
371
|
+
return [];
|
|
372
|
+
}
|
|
373
|
+
getPredictedEvents() {
|
|
374
|
+
return [];
|
|
375
|
+
}
|
|
376
|
+
get [Symbol.toStringTag]() {
|
|
377
|
+
return "PointerEvent";
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
class KeyboardEvent extends UIEvent {
|
|
381
|
+
altKey;
|
|
382
|
+
code;
|
|
383
|
+
ctrlKey;
|
|
384
|
+
isComposing;
|
|
385
|
+
key;
|
|
386
|
+
location;
|
|
387
|
+
metaKey;
|
|
388
|
+
repeat;
|
|
389
|
+
shiftKey;
|
|
390
|
+
keyCode;
|
|
391
|
+
which;
|
|
392
|
+
static DOM_KEY_LOCATION_STANDARD = 0;
|
|
393
|
+
static DOM_KEY_LOCATION_LEFT = 1;
|
|
394
|
+
static DOM_KEY_LOCATION_RIGHT = 2;
|
|
395
|
+
static DOM_KEY_LOCATION_NUMPAD = 3;
|
|
396
|
+
constructor(type, eventInitDict) {
|
|
397
|
+
super(type, eventInitDict);
|
|
398
|
+
this.altKey = eventInitDict?.altKey ?? false;
|
|
399
|
+
this.code = eventInitDict?.code ?? "";
|
|
400
|
+
this.ctrlKey = eventInitDict?.ctrlKey ?? false;
|
|
401
|
+
this.isComposing = eventInitDict?.isComposing ?? false;
|
|
402
|
+
this.key = eventInitDict?.key ?? "";
|
|
403
|
+
this.location = eventInitDict?.location ?? 0;
|
|
404
|
+
this.metaKey = eventInitDict?.metaKey ?? false;
|
|
405
|
+
this.repeat = eventInitDict?.repeat ?? false;
|
|
406
|
+
this.shiftKey = eventInitDict?.shiftKey ?? false;
|
|
407
|
+
this.keyCode = eventInitDict?.keyCode ?? 0;
|
|
408
|
+
this.which = eventInitDict?.which ?? 0;
|
|
409
|
+
}
|
|
410
|
+
getModifierState(key) {
|
|
411
|
+
switch (key) {
|
|
412
|
+
case "Alt":
|
|
413
|
+
return this.altKey;
|
|
414
|
+
case "Control":
|
|
415
|
+
return this.ctrlKey;
|
|
416
|
+
case "Meta":
|
|
417
|
+
return this.metaKey;
|
|
418
|
+
case "Shift":
|
|
419
|
+
return this.shiftKey;
|
|
420
|
+
default:
|
|
421
|
+
return false;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
get [Symbol.toStringTag]() {
|
|
425
|
+
return "KeyboardEvent";
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
class WheelEvent extends MouseEvent {
|
|
429
|
+
deltaX;
|
|
430
|
+
deltaY;
|
|
431
|
+
deltaZ;
|
|
432
|
+
deltaMode;
|
|
433
|
+
static DOM_DELTA_PIXEL = 0;
|
|
434
|
+
static DOM_DELTA_LINE = 1;
|
|
435
|
+
static DOM_DELTA_PAGE = 2;
|
|
436
|
+
constructor(type, eventInitDict) {
|
|
437
|
+
super(type, eventInitDict);
|
|
438
|
+
this.deltaX = eventInitDict?.deltaX ?? 0;
|
|
439
|
+
this.deltaY = eventInitDict?.deltaY ?? 0;
|
|
440
|
+
this.deltaZ = eventInitDict?.deltaZ ?? 0;
|
|
441
|
+
this.deltaMode = eventInitDict?.deltaMode ?? 0;
|
|
442
|
+
}
|
|
443
|
+
get [Symbol.toStringTag]() {
|
|
444
|
+
return "WheelEvent";
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
class FocusEvent extends UIEvent {
|
|
448
|
+
relatedTarget;
|
|
449
|
+
constructor(type, eventInitDict) {
|
|
450
|
+
super(type, eventInitDict);
|
|
451
|
+
this.relatedTarget = eventInitDict?.relatedTarget ?? null;
|
|
452
|
+
}
|
|
453
|
+
get [Symbol.toStringTag]() {
|
|
454
|
+
return "FocusEvent";
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
var index_default = {
|
|
458
|
+
Event,
|
|
459
|
+
CustomEvent,
|
|
460
|
+
EventTarget,
|
|
461
|
+
MessageEvent,
|
|
462
|
+
ErrorEvent,
|
|
463
|
+
CloseEvent,
|
|
464
|
+
ProgressEvent,
|
|
465
|
+
UIEvent,
|
|
466
|
+
MouseEvent,
|
|
467
|
+
PointerEvent,
|
|
468
|
+
KeyboardEvent,
|
|
469
|
+
WheelEvent,
|
|
470
|
+
FocusEvent
|
|
471
|
+
};
|
|
472
|
+
export {
|
|
473
|
+
CloseEvent,
|
|
474
|
+
CustomEvent,
|
|
475
|
+
DOMException,
|
|
476
|
+
ErrorEvent,
|
|
477
|
+
Event,
|
|
478
|
+
EventTarget,
|
|
479
|
+
FocusEvent,
|
|
480
|
+
KeyboardEvent,
|
|
481
|
+
MessageEvent,
|
|
482
|
+
MouseEvent,
|
|
483
|
+
PointerEvent,
|
|
484
|
+
ProgressEvent,
|
|
485
|
+
UIEvent,
|
|
486
|
+
WheelEvent,
|
|
487
|
+
index_default as default
|
|
488
|
+
};
|