@aura3d/input 4.7.12 → 5.0.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/dist/ActionMap.d.ts.map +1 -1
- package/dist/ActionMap.js.map +1 -1
- package/dist/ComboDetector.d.ts.map +1 -1
- package/dist/ComboDetector.js.map +1 -1
- package/dist/GamepadDevice.d.ts.map +1 -1
- package/dist/GamepadDevice.js.map +1 -1
- package/dist/GamepadInput.d.ts.map +1 -1
- package/dist/GamepadInput.js.map +1 -1
- package/dist/GestureControls.d.ts.map +1 -1
- package/dist/GestureControls.js.map +1 -1
- package/dist/GestureRecognizer.d.ts +5 -1
- package/dist/GestureRecognizer.d.ts.map +1 -1
- package/dist/GestureRecognizer.js +74 -18
- package/dist/GestureRecognizer.js.map +1 -1
- package/dist/Haptics.d.ts.map +1 -1
- package/dist/Haptics.js.map +1 -1
- package/dist/InputReplay.d.ts.map +1 -1
- package/dist/InputReplay.js +42 -13
- package/dist/InputReplay.js.map +1 -1
- package/dist/InputSnapshot.d.ts +62 -7
- package/dist/InputSnapshot.d.ts.map +1 -1
- package/dist/InputSnapshot.js +36 -5
- package/dist/InputSnapshot.js.map +1 -1
- package/dist/InputSystem.d.ts +10 -1
- package/dist/InputSystem.d.ts.map +1 -1
- package/dist/InputSystem.js +175 -12
- package/dist/InputSystem.js.map +1 -1
- package/dist/InputValueProcessors.d.ts.map +1 -1
- package/dist/InputValueProcessors.js.map +1 -1
- package/dist/InteractionSystem.d.ts +9 -4
- package/dist/InteractionSystem.d.ts.map +1 -1
- package/dist/InteractionSystem.js +93 -18
- package/dist/InteractionSystem.js.map +1 -1
- package/dist/KeyboardDevice.d.ts.map +1 -1
- package/dist/KeyboardDevice.js.map +1 -1
- package/dist/PickingRay.d.ts.map +1 -1
- package/dist/PickingRay.js.map +1 -1
- package/dist/PointerDevice.d.ts +61 -11
- package/dist/PointerDevice.d.ts.map +1 -1
- package/dist/PointerDevice.js +306 -34
- package/dist/PointerDevice.js.map +1 -1
- package/dist/PointerLeases.d.ts +22 -0
- package/dist/PointerLeases.d.ts.map +1 -0
- package/dist/PointerLeases.js +432 -0
- package/dist/PointerLeases.js.map +1 -0
- package/dist/TouchLayouts.d.ts.map +1 -1
- package/dist/TouchLayouts.js.map +1 -1
- package/dist/VirtualTouchControls.d.ts.map +1 -1
- package/dist/VirtualTouchControls.js.map +1 -1
- package/dist/WebXRSessionController.d.ts +161 -51
- package/dist/WebXRSessionController.d.ts.map +1 -1
- package/dist/WebXRSessionController.js +430 -203
- package/dist/WebXRSessionController.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/InputSnapshot.js
CHANGED
|
@@ -10,22 +10,39 @@ export class InputSnapshot {
|
|
|
10
10
|
this.previousKeys = new Set(options.previousKeys ?? EMPTY_SET);
|
|
11
11
|
this.gamepads = Object.freeze([...(options.gamepads ?? [])]);
|
|
12
12
|
const previousButtons = options.previousPointerButtons ?? EMPTY_BUTTON_SET;
|
|
13
|
-
const currentButtons = new Set(options.pointer?.buttons
|
|
13
|
+
const currentButtons = new Set([...options.pointer?.buttons ?? []].filter(([, state]) => state.down).map(([button]) => button));
|
|
14
14
|
const buttons = new Map();
|
|
15
15
|
for (const button of new Set([...previousButtons, ...currentButtons])) {
|
|
16
16
|
const down = currentButtons.has(button);
|
|
17
17
|
const wasDown = previousButtons.has(button);
|
|
18
|
-
buttons.set(button, Object.freeze({
|
|
18
|
+
buttons.set(button, Object.freeze({
|
|
19
|
+
down,
|
|
20
|
+
pressed: down && !wasDown,
|
|
21
|
+
released: !down && wasDown && !options.cancelledPointerButtons?.has(button)
|
|
22
|
+
}));
|
|
19
23
|
}
|
|
24
|
+
const x = options.pointer?.x ?? 0;
|
|
25
|
+
const y = options.pointer?.y ?? 0;
|
|
20
26
|
this.pointer = Object.freeze({
|
|
21
|
-
x
|
|
22
|
-
y
|
|
27
|
+
x,
|
|
28
|
+
y,
|
|
29
|
+
clientX: options.pointer?.clientX ?? x,
|
|
30
|
+
clientY: options.pointer?.clientY ?? y,
|
|
31
|
+
cssX: options.pointer?.cssX ?? x,
|
|
32
|
+
cssY: options.pointer?.cssY ?? y,
|
|
33
|
+
framebufferX: options.pointer?.framebufferX ?? x,
|
|
34
|
+
framebufferY: options.pointer?.framebufferY ?? y,
|
|
23
35
|
deltaX: options.pointer?.deltaX ?? 0,
|
|
24
36
|
deltaY: options.pointer?.deltaY ?? 0,
|
|
25
37
|
wheelX: options.pointer?.wheelX ?? 0,
|
|
26
38
|
wheelY: options.pointer?.wheelY ?? 0,
|
|
39
|
+
timestamp: options.pointer?.timestamp ?? 0,
|
|
40
|
+
primaryId: options.pointer?.primaryId,
|
|
27
41
|
buttons,
|
|
28
|
-
touches: Object.freeze([...(options.pointer?.touches ?? [])])
|
|
42
|
+
touches: Object.freeze([...(options.pointer?.touches ?? [])]),
|
|
43
|
+
contacts: Object.freeze([...(options.pointer?.contacts ?? [])]),
|
|
44
|
+
cancellations: Object.freeze([...(options.pointer?.cancellations ?? [])]),
|
|
45
|
+
cancellationReason: options.pointer?.cancellationReason
|
|
29
46
|
});
|
|
30
47
|
}
|
|
31
48
|
key(code) {
|
|
@@ -36,6 +53,20 @@ export class InputSnapshot {
|
|
|
36
53
|
button(button) {
|
|
37
54
|
return this.pointer.buttons.get(button) ?? Object.freeze({ down: false, pressed: false, released: false });
|
|
38
55
|
}
|
|
56
|
+
/** View the same frame from one contact, useful to compute one picking ray per pointer. */
|
|
57
|
+
forContact(contact) {
|
|
58
|
+
const view = Object.create(this);
|
|
59
|
+
Object.defineProperty(view, "pointer", { value: Object.freeze({
|
|
60
|
+
...this.pointer,
|
|
61
|
+
x: contact.x, y: contact.y,
|
|
62
|
+
clientX: contact.clientX, clientY: contact.clientY,
|
|
63
|
+
cssX: contact.cssX, cssY: contact.cssY,
|
|
64
|
+
framebufferX: contact.framebufferX, framebufferY: contact.framebufferY,
|
|
65
|
+
deltaX: contact.deltaX, deltaY: contact.deltaY,
|
|
66
|
+
timestamp: contact.timestamp, primaryId: contact.id, buttons: contact.buttons
|
|
67
|
+
}) });
|
|
68
|
+
return view;
|
|
69
|
+
}
|
|
39
70
|
gamepadButton(gamepadIndex, buttonIndex) {
|
|
40
71
|
return (this.gamepads.find((gamepad) => gamepad.index === gamepadIndex)?.buttons[buttonIndex] ??
|
|
41
72
|
Object.freeze({ down: false, pressed: false, released: false }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputSnapshot.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"InputSnapshot.js","sourceRoot":"","sources":["../src/InputSnapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/InputSystem.d.ts
CHANGED
|
@@ -3,9 +3,13 @@ import { GamepadDevice, type GamepadLike } from "./GamepadDevice.js";
|
|
|
3
3
|
import { InputSnapshot } from "./InputSnapshot.js";
|
|
4
4
|
import { KeyboardDevice } from "./KeyboardDevice.js";
|
|
5
5
|
import { PointerDevice } from "./PointerDevice.js";
|
|
6
|
-
|
|
6
|
+
import { type PointerCaptureTargetLike } from "./PointerLeases.js";
|
|
7
|
+
export interface InputEventTargetLike extends PointerCaptureTargetLike {
|
|
7
8
|
addEventListener(type: string, listener: EventListener): void;
|
|
8
9
|
removeEventListener(type: string, listener: EventListener): void;
|
|
10
|
+
readonly ownerDocument?: {
|
|
11
|
+
readonly defaultView?: InputEventTargetLike | null;
|
|
12
|
+
};
|
|
9
13
|
}
|
|
10
14
|
export declare class InputSystem {
|
|
11
15
|
readonly keyboard: KeyboardDevice;
|
|
@@ -13,12 +17,17 @@ export declare class InputSystem {
|
|
|
13
17
|
readonly gamepads: GamepadDevice;
|
|
14
18
|
readonly actions: ActionMap;
|
|
15
19
|
private readonly attachedTargets;
|
|
20
|
+
private readonly captureReleasers;
|
|
16
21
|
private snapshotRef;
|
|
17
22
|
constructor(target?: InputEventTargetLike);
|
|
18
23
|
get snapshot(): InputSnapshot;
|
|
19
24
|
attach(target: InputEventTargetLike): void;
|
|
20
25
|
update(gamepads?: readonly (GamepadLike | null | undefined)[]): InputSnapshot;
|
|
21
26
|
endFrame(): void;
|
|
27
|
+
/** Terminates pointer input after a device is removed, without activating release bindings. */
|
|
28
|
+
disconnectPointer(timestamp?: number): void;
|
|
29
|
+
private prepareCaptureReleases;
|
|
30
|
+
private releaseCaptures;
|
|
22
31
|
dispose(): void;
|
|
23
32
|
}
|
|
24
33
|
//# sourceMappingURL=InputSystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputSystem.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"InputSystem.d.ts","sourceRoot":"","sources":["../src/InputSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA0B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA4E,MAAM,iBAAiB,CAAC;AAC1H,OAAO,EAAqD,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEnH,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IACpE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;KAAE,CAAC;CACjF;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,QAAQ,iBAAwB;IACzC,QAAQ,CAAC,OAAO,gBAAuB;IACvC,QAAQ,CAAC,QAAQ,gBAAuB;IACxC,QAAQ,CAAC,OAAO,YAAmB;IAEnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsD;IACtF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqD;IACtF,OAAO,CAAC,WAAW,CAAuB;gBAE9B,MAAM,CAAC,EAAE,oBAAoB;IAMzC,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IA6J1C,MAAM,CAAC,QAAQ,GAAE,SAAS,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,EAAO,GAAG,aAAa;IAYjF,QAAQ,IAAI,IAAI;IAKhB,+FAA+F;IAC/F,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAK3C,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,eAAe;IAMvB,OAAO,IAAI,IAAI;CAYhB"}
|
package/dist/InputSystem.js
CHANGED
|
@@ -3,12 +3,14 @@ import { GamepadDevice } from "./GamepadDevice.js";
|
|
|
3
3
|
import { InputSnapshot } from "./InputSnapshot.js";
|
|
4
4
|
import { KeyboardDevice } from "./KeyboardDevice.js";
|
|
5
5
|
import { PointerDevice } from "./PointerDevice.js";
|
|
6
|
+
import { acquirePointerCapture, releasePointerCaptureLease } from "./PointerLeases.js";
|
|
6
7
|
export class InputSystem {
|
|
7
8
|
keyboard = new KeyboardDevice();
|
|
8
9
|
pointer = new PointerDevice();
|
|
9
10
|
gamepads = new GamepadDevice();
|
|
10
11
|
actions = new ActionMap();
|
|
11
12
|
attachedTargets = new Map();
|
|
13
|
+
captureReleasers = new Map();
|
|
12
14
|
snapshotRef = new InputSnapshot();
|
|
13
15
|
constructor(target) {
|
|
14
16
|
if (target) {
|
|
@@ -24,13 +26,122 @@ export class InputSystem {
|
|
|
24
26
|
}
|
|
25
27
|
const onKeyDown = ((event) => this.keyboard.keyDown(event));
|
|
26
28
|
const onKeyUp = ((event) => this.keyboard.keyUp(event));
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
29
|
+
const surface = target;
|
|
30
|
+
const captured = new Map();
|
|
31
|
+
const expectedLosses = new Map();
|
|
32
|
+
const pressTimes = new Map();
|
|
33
|
+
const isEarlierThanPress = (pointer) => {
|
|
34
|
+
const pressTime = pressTimes.get(pointer.pointerId ?? 0);
|
|
35
|
+
return pressTime !== undefined && pointer.timeStamp !== undefined &&
|
|
36
|
+
Number.isFinite(pointer.timeStamp) && pointer.timeStamp < pressTime;
|
|
37
|
+
};
|
|
38
|
+
const releaseLease = (id, owner, release) => {
|
|
39
|
+
try {
|
|
40
|
+
releasePointerCaptureLease(target, id, owner, release, () => {
|
|
41
|
+
expectedLosses.set(id, (expectedLosses.get(id) ?? 0) + 1);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
expectedLosses.delete(id); // The browser may already have released capture.
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const releaseCapture = (id, owner = captured.get(id), release = true) => {
|
|
49
|
+
if (!owner || captured.get(id) !== owner)
|
|
50
|
+
return;
|
|
51
|
+
// Forget this generation before invoking the target, which may dispatch
|
|
52
|
+
// loss or a new press synchronously from releasePointerCapture.
|
|
53
|
+
captured.delete(id);
|
|
54
|
+
releaseLease(id, owner, release);
|
|
55
|
+
};
|
|
56
|
+
const prepareCaptureReleases = () => {
|
|
57
|
+
pressTimes.clear();
|
|
58
|
+
// Detach the old generation before any native release. Another target
|
|
59
|
+
// or pointer in the batch may receive a new press reentrantly.
|
|
60
|
+
const previous = [...captured];
|
|
61
|
+
captured.clear();
|
|
62
|
+
return () => { for (const [id, owner] of previous)
|
|
63
|
+
releaseLease(id, owner, true); };
|
|
64
|
+
};
|
|
65
|
+
this.captureReleasers.set(target, prepareCaptureReleases);
|
|
66
|
+
const onPointerMove = ((event) => {
|
|
67
|
+
const pointer = event;
|
|
68
|
+
if (!isEarlierThanPress(pointer))
|
|
69
|
+
this.pointer.move(pointer, surface);
|
|
70
|
+
});
|
|
71
|
+
const onPointerDown = ((event) => {
|
|
72
|
+
const pointer = event;
|
|
73
|
+
const id = pointer.pointerId ?? 0;
|
|
74
|
+
if (pointer.timeStamp !== undefined && Number.isFinite(pointer.timeStamp))
|
|
75
|
+
pressTimes.set(id, pointer.timeStamp);
|
|
76
|
+
else
|
|
77
|
+
pressTimes.delete(id);
|
|
78
|
+
this.pointer.down(pointer, surface);
|
|
79
|
+
if (pointer.pointerId !== undefined)
|
|
80
|
+
expectedLosses.delete(id);
|
|
81
|
+
if (pointer.pointerId !== undefined && target.setPointerCapture && !captured.has(pointer.pointerId)) {
|
|
82
|
+
const owner = {};
|
|
83
|
+
captured.set(pointer.pointerId, owner);
|
|
84
|
+
try {
|
|
85
|
+
acquirePointerCapture(target, pointer.pointerId, owner);
|
|
86
|
+
}
|
|
87
|
+
catch { /* Synthetic or inactive pointer. */ }
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
const onPointerUp = ((event) => {
|
|
91
|
+
const pointer = event;
|
|
92
|
+
// A control can dispatch a new press from an older up/cancel listener
|
|
93
|
+
// before this listener sees the older event on a headless event target.
|
|
94
|
+
if (isEarlierThanPress(pointer))
|
|
95
|
+
return;
|
|
96
|
+
if (!pointer.buttons)
|
|
97
|
+
pressTimes.delete(pointer.pointerId ?? 0);
|
|
98
|
+
this.pointer.up(pointer, surface);
|
|
99
|
+
if (pointer.pointerId !== undefined && !pointer.buttons)
|
|
100
|
+
releaseCapture(pointer.pointerId);
|
|
101
|
+
});
|
|
102
|
+
const onPointerCancel = ((event) => {
|
|
103
|
+
const pointer = event;
|
|
104
|
+
if (isEarlierThanPress(pointer))
|
|
105
|
+
return;
|
|
106
|
+
pressTimes.delete(pointer.pointerId ?? 0);
|
|
107
|
+
this.pointer.cancel(pointer, "pointercancel", surface);
|
|
108
|
+
if (pointer.pointerId !== undefined)
|
|
109
|
+
releaseCapture(pointer.pointerId);
|
|
110
|
+
});
|
|
111
|
+
const onLostCapture = ((event) => {
|
|
112
|
+
const pointer = event;
|
|
113
|
+
if (isEarlierThanPress(pointer))
|
|
114
|
+
return;
|
|
115
|
+
if (pointer.pointerId !== undefined) {
|
|
116
|
+
const expected = expectedLosses.get(pointer.pointerId) ?? 0;
|
|
117
|
+
if (expected > 0) {
|
|
118
|
+
if (expected === 1)
|
|
119
|
+
expectedLosses.delete(pointer.pointerId);
|
|
120
|
+
else
|
|
121
|
+
expectedLosses.set(pointer.pointerId, expected - 1);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// A stale loss after a new press must not cancel the newer capture.
|
|
125
|
+
try {
|
|
126
|
+
if (target.hasPointerCapture?.(pointer.pointerId))
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
catch { /* Treat an unavailable capture as lost. */ }
|
|
130
|
+
releaseCapture(pointer.pointerId, captured.get(pointer.pointerId), false);
|
|
131
|
+
}
|
|
132
|
+
pressTimes.delete(pointer.pointerId ?? 0);
|
|
133
|
+
this.pointer.cancel(pointer, "lostpointercapture", surface);
|
|
134
|
+
});
|
|
135
|
+
const onPointerLeave = ((event) => {
|
|
136
|
+
const pointer = event;
|
|
137
|
+
if (!isEarlierThanPress(pointer))
|
|
138
|
+
this.pointer.leave(pointer);
|
|
139
|
+
});
|
|
140
|
+
const onWheel = ((event) => this.pointer.wheel(event, surface));
|
|
141
|
+
const onBlur = ((event) => {
|
|
32
142
|
this.keyboard.blur();
|
|
33
|
-
this.pointer.blur();
|
|
143
|
+
this.pointer.blur("blur", event.timeStamp);
|
|
144
|
+
this.releaseCaptures();
|
|
34
145
|
});
|
|
35
146
|
const listeners = [
|
|
36
147
|
["keydown", onKeyDown],
|
|
@@ -38,14 +149,49 @@ export class InputSystem {
|
|
|
38
149
|
["pointermove", onPointerMove],
|
|
39
150
|
["pointerdown", onPointerDown],
|
|
40
151
|
["pointerup", onPointerUp],
|
|
41
|
-
["pointercancel",
|
|
152
|
+
["pointercancel", onPointerCancel],
|
|
153
|
+
["lostpointercapture", onLostCapture],
|
|
154
|
+
["pointerleave", onPointerLeave],
|
|
42
155
|
["wheel", onWheel],
|
|
43
156
|
["blur", onBlur]
|
|
44
157
|
];
|
|
45
|
-
|
|
158
|
+
// Remove listeners before releasing captures so reentrant target callbacks
|
|
159
|
+
// cannot attach another press to a system being disposed.
|
|
160
|
+
const disposers = [() => { prepareCaptureReleases()(); this.captureReleasers.delete(target); }];
|
|
161
|
+
// The public structural target only requires two arguments; DOM targets
|
|
162
|
+
// accept this optional third capture argument, and simpler hosts ignore it.
|
|
163
|
+
// The options-object form is used for both calls: older Node EventTarget
|
|
164
|
+
// releases (the ACR image's Node; local Node 26 is fixed) read only
|
|
165
|
+
// `options?.capture` in removeEventListener, so a boolean `true` there
|
|
166
|
+
// left every capture listener attached after dispose.
|
|
167
|
+
const captureOptions = { capture: true };
|
|
168
|
+
const eventTarget = target;
|
|
46
169
|
for (const [type, listener] of listeners) {
|
|
47
|
-
|
|
48
|
-
|
|
170
|
+
// DOM capture phase observes an old event before a control's bubbling
|
|
171
|
+
// listener can synchronously dispatch a new press with the same ID.
|
|
172
|
+
const capture = type.startsWith("pointer") || type === "lostpointercapture";
|
|
173
|
+
if (capture) {
|
|
174
|
+
try {
|
|
175
|
+
eventTarget.addEventListener(type, listener, captureOptions);
|
|
176
|
+
disposers.push(() => eventTarget.removeEventListener(type, listener, captureOptions));
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// Some synthetic targets enforce the two-argument structural API.
|
|
180
|
+
target.addEventListener(type, listener);
|
|
181
|
+
disposers.push(() => target.removeEventListener(type, listener));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
target.addEventListener(type, listener);
|
|
186
|
+
disposers.push(() => target.removeEventListener(type, listener));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Element blur covers focus changes within the document; window blur covers the
|
|
190
|
+
// tab/window losing focus, which is not delivered as an element blur everywhere.
|
|
191
|
+
const windowTarget = target.ownerDocument?.defaultView;
|
|
192
|
+
if (windowTarget && windowTarget !== target) {
|
|
193
|
+
windowTarget.addEventListener("blur", onBlur);
|
|
194
|
+
disposers.push(() => windowTarget.removeEventListener("blur", onBlur));
|
|
49
195
|
}
|
|
50
196
|
this.attachedTargets.set(target, disposers);
|
|
51
197
|
}
|
|
@@ -64,15 +210,32 @@ export class InputSystem {
|
|
|
64
210
|
this.keyboard.endFrame();
|
|
65
211
|
this.pointer.endFrame();
|
|
66
212
|
}
|
|
213
|
+
/** Terminates pointer input after a device is removed, without activating release bindings. */
|
|
214
|
+
disconnectPointer(timestamp) {
|
|
215
|
+
this.pointer.blur("device-disconnect", timestamp);
|
|
216
|
+
this.releaseCaptures();
|
|
217
|
+
}
|
|
218
|
+
prepareCaptureReleases() {
|
|
219
|
+
return [...this.captureReleasers.values()].map((prepare) => prepare());
|
|
220
|
+
}
|
|
221
|
+
releaseCaptures() {
|
|
222
|
+
// Prepare every target before releasing any of them, so a callback from
|
|
223
|
+
// one target cannot accidentally release a new press on a later target.
|
|
224
|
+
for (const release of this.prepareCaptureReleases())
|
|
225
|
+
release();
|
|
226
|
+
}
|
|
67
227
|
dispose() {
|
|
228
|
+
this.keyboard.blur();
|
|
229
|
+
this.pointer.blur("dispose");
|
|
230
|
+
const releases = this.prepareCaptureReleases();
|
|
68
231
|
for (const disposers of this.attachedTargets.values()) {
|
|
69
232
|
while (disposers.length > 0) {
|
|
70
233
|
disposers.pop()?.();
|
|
71
234
|
}
|
|
72
235
|
}
|
|
73
236
|
this.attachedTargets.clear();
|
|
74
|
-
|
|
75
|
-
|
|
237
|
+
for (const release of releases)
|
|
238
|
+
release();
|
|
76
239
|
}
|
|
77
240
|
}
|
|
78
241
|
//# sourceMappingURL=InputSystem.js.map
|
package/dist/InputSystem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputSystem.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"InputSystem.js","sourceRoot":"","sources":["../src/InputSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputValueProcessors.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"InputValueProcessors.d.ts","sourceRoot":"","sources":["../src/InputValueProcessors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAAE,YAAY,SAAS,GAAG,MAAM,CAa1H"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputValueProcessors.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"InputValueProcessors.js","sourceRoot":"","sources":["../src/InputValueProcessors.ts"],"names":[],"mappings":"AAOA,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,UAA0C,EAAE,YAAY,GAAG,CAAC,GAAG,EAAE;IAChH,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aACxG,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;aACtE,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,CAAC,CAAC,CAAC;aAC9C,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;aAClG,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvI,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,QAAgB;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC"}
|
|
@@ -15,11 +15,12 @@ export interface InteractionHit {
|
|
|
15
15
|
readonly target: InteractionTarget;
|
|
16
16
|
readonly distance: number;
|
|
17
17
|
}
|
|
18
|
-
export type InteractionEventType = "hover-enter" | "hover-exit" | "pointer-down" | "drag-start" | "drag" | "drag-end" | "click";
|
|
18
|
+
export type InteractionEventType = "hover-enter" | "hover-exit" | "pointer-down" | "pointer-cancel" | "drag-start" | "drag" | "drag-end" | "drag-cancel" | "click";
|
|
19
19
|
export interface InteractionEvent {
|
|
20
20
|
readonly type: InteractionEventType;
|
|
21
21
|
readonly hit?: InteractionHit;
|
|
22
22
|
readonly target?: InteractionTarget;
|
|
23
|
+
readonly pointerId?: number;
|
|
23
24
|
readonly snapshot: InputSnapshot;
|
|
24
25
|
}
|
|
25
26
|
export type InteractionListener = (event: InteractionEvent) => void;
|
|
@@ -29,12 +30,16 @@ export declare class InteractionSystem {
|
|
|
29
30
|
private readonly rayProvider;
|
|
30
31
|
private readonly targetProvider;
|
|
31
32
|
private readonly listeners;
|
|
32
|
-
private
|
|
33
|
-
private
|
|
34
|
-
private
|
|
33
|
+
private readonly states;
|
|
34
|
+
private disposed;
|
|
35
|
+
private contactMode;
|
|
35
36
|
constructor(rayProvider: InteractionRayProvider, targetProvider: InteractionTargetProvider);
|
|
36
37
|
subscribe(listener: InteractionListener): () => void;
|
|
37
38
|
update(snapshot: InputSnapshot): InteractionHit | undefined;
|
|
39
|
+
dispose(): void;
|
|
40
|
+
private updateContact;
|
|
41
|
+
private cancel;
|
|
42
|
+
private endHover;
|
|
38
43
|
pick(ray: Ray): InteractionHit | undefined;
|
|
39
44
|
private emit;
|
|
40
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InteractionSystem.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"InteractionSystem.d.ts","sourceRoot":"","sources":["../src/InteractionSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,KAAK,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,gBAAgB,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,OAAO,CAAC;AAEnK,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AACpE,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,GAAG,CAAC;AACtE,MAAM,MAAM,yBAAyB,GAAG,MAAM,SAAS,iBAAiB,EAAE,CAAC;AAE3E,qBAAa,iBAAiB;IAO1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsG;IAC7H,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;gBAGT,WAAW,EAAE,sBAAsB,EACnC,cAAc,EAAE,yBAAyB;IAG5D,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAMpD,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,cAAc,GAAG,SAAS;IAgC3D,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,QAAQ;IAOhB,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,GAAG,SAAS;IAQ1C,OAAO,CAAC,IAAI;CAGb"}
|
|
@@ -2,43 +2,118 @@ export class InteractionSystem {
|
|
|
2
2
|
rayProvider;
|
|
3
3
|
targetProvider;
|
|
4
4
|
listeners = new Set();
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
states = new Map();
|
|
6
|
+
disposed = false;
|
|
7
|
+
contactMode = false;
|
|
8
8
|
constructor(rayProvider, targetProvider) {
|
|
9
9
|
this.rayProvider = rayProvider;
|
|
10
10
|
this.targetProvider = targetProvider;
|
|
11
11
|
}
|
|
12
12
|
subscribe(listener) {
|
|
13
|
+
if (this.disposed)
|
|
14
|
+
return () => { };
|
|
13
15
|
this.listeners.add(listener);
|
|
14
16
|
return () => this.listeners.delete(listener);
|
|
15
17
|
}
|
|
16
18
|
update(snapshot) {
|
|
19
|
+
if (this.disposed)
|
|
20
|
+
return undefined;
|
|
21
|
+
if (snapshot.pointer.cancellationReason) {
|
|
22
|
+
for (const id of [...this.states.keys()])
|
|
23
|
+
this.cancel(id, snapshot);
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
if (snapshot.pointer.contacts.length > 0 || snapshot.pointer.cancellations.length > 0)
|
|
27
|
+
this.contactMode = true;
|
|
28
|
+
for (const cancellation of snapshot.pointer.cancellations)
|
|
29
|
+
this.cancel(cancellation.id, snapshot);
|
|
30
|
+
let primaryHit;
|
|
31
|
+
let firstHit;
|
|
32
|
+
let sawPrimary = false;
|
|
33
|
+
if (snapshot.pointer.contacts.length > 0) {
|
|
34
|
+
const present = new Set(snapshot.pointer.contacts.map(contact => contact.id));
|
|
35
|
+
for (const id of [...this.states.keys()])
|
|
36
|
+
if (!present.has(id))
|
|
37
|
+
this.cancel(id, snapshot);
|
|
38
|
+
for (const contact of snapshot.pointer.contacts) {
|
|
39
|
+
if (contact.cancelled)
|
|
40
|
+
continue;
|
|
41
|
+
const view = snapshot.forContact(contact);
|
|
42
|
+
const hit = this.updateContact(contact.id, view);
|
|
43
|
+
if (firstHit === undefined)
|
|
44
|
+
firstHit = hit;
|
|
45
|
+
if (contact.id === snapshot.pointer.primaryId) {
|
|
46
|
+
primaryHit = hit;
|
|
47
|
+
sawPrimary = true;
|
|
48
|
+
}
|
|
49
|
+
if (contact.released && (contact.pointerType === "touch" || !contact.overTarget))
|
|
50
|
+
this.endHover(contact.id, view);
|
|
51
|
+
}
|
|
52
|
+
return sawPrimary ? primaryHit : firstHit;
|
|
53
|
+
}
|
|
54
|
+
else if (this.contactMode) {
|
|
55
|
+
for (const id of [...this.states.keys()])
|
|
56
|
+
this.cancel(id, snapshot);
|
|
57
|
+
}
|
|
58
|
+
else if (snapshot.pointer.cancellations.length === 0) {
|
|
59
|
+
primaryHit = this.updateContact(-1, snapshot);
|
|
60
|
+
}
|
|
61
|
+
return primaryHit;
|
|
62
|
+
}
|
|
63
|
+
dispose() {
|
|
64
|
+
this.disposed = true;
|
|
65
|
+
this.states.clear();
|
|
66
|
+
this.listeners.clear();
|
|
67
|
+
}
|
|
68
|
+
updateContact(id, snapshot) {
|
|
17
69
|
const hit = this.pick(this.rayProvider(snapshot));
|
|
18
70
|
const target = hit?.target;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
71
|
+
const state = this.states.get(id) ?? { dragging: false };
|
|
72
|
+
this.states.set(id, state);
|
|
73
|
+
const pointerId = id < 0 ? undefined : id;
|
|
74
|
+
if (state.hovered?.id !== target?.id) {
|
|
75
|
+
if (state.hovered)
|
|
76
|
+
this.emit({ type: "hover-exit", target: state.hovered, snapshot, pointerId });
|
|
22
77
|
if (target)
|
|
23
|
-
this.emit({ type: "hover-enter", hit, target, snapshot });
|
|
24
|
-
|
|
78
|
+
this.emit({ type: "hover-enter", hit, target, snapshot, pointerId });
|
|
79
|
+
state.hovered = target;
|
|
25
80
|
}
|
|
26
81
|
if (snapshot.button(0).pressed && target) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.emit({ type: "pointer-down", hit, target, snapshot });
|
|
82
|
+
state.pressed = target;
|
|
83
|
+
state.dragging = false;
|
|
84
|
+
this.emit({ type: "pointer-down", hit, target, snapshot, pointerId });
|
|
30
85
|
}
|
|
31
|
-
if (
|
|
32
|
-
this.emit({ type:
|
|
33
|
-
|
|
86
|
+
if (state.pressed && snapshot.button(0).down && (snapshot.pointer.deltaX !== 0 || snapshot.pointer.deltaY !== 0)) {
|
|
87
|
+
this.emit({ type: state.dragging ? "drag" : "drag-start", hit, target: state.pressed, snapshot, pointerId });
|
|
88
|
+
state.dragging = true;
|
|
34
89
|
}
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
90
|
+
if (state.pressed && snapshot.button(0).released) {
|
|
91
|
+
if (state.dragging || target?.id === state.pressed.id) {
|
|
92
|
+
this.emit({ type: state.dragging ? "drag-end" : "click", hit, target: state.pressed, snapshot, pointerId });
|
|
93
|
+
}
|
|
94
|
+
state.pressed = undefined;
|
|
95
|
+
state.dragging = false;
|
|
39
96
|
}
|
|
40
97
|
return hit;
|
|
41
98
|
}
|
|
99
|
+
cancel(id, snapshot) {
|
|
100
|
+
const state = this.states.get(id);
|
|
101
|
+
if (!state)
|
|
102
|
+
return;
|
|
103
|
+
if (state.pressed)
|
|
104
|
+
this.emit({ type: state.dragging ? "drag-cancel" : "pointer-cancel", target: state.pressed, snapshot, pointerId: id < 0 ? undefined : id });
|
|
105
|
+
this.endHover(id, snapshot);
|
|
106
|
+
this.states.delete(id);
|
|
107
|
+
}
|
|
108
|
+
endHover(id, snapshot) {
|
|
109
|
+
const state = this.states.get(id);
|
|
110
|
+
if (state?.hovered)
|
|
111
|
+
this.emit({ type: "hover-exit", target: state.hovered, snapshot, pointerId: id < 0 ? undefined : id });
|
|
112
|
+
if (state)
|
|
113
|
+
state.hovered = undefined;
|
|
114
|
+
if (!state?.pressed)
|
|
115
|
+
this.states.delete(id);
|
|
116
|
+
}
|
|
42
117
|
pick(ray) {
|
|
43
118
|
const hits = this.targetProvider()
|
|
44
119
|
.map((target) => ({ target, distance: intersectBounds(ray, target.bounds) }))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InteractionSystem.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"InteractionSystem.js","sourceRoot":"","sources":["../src/InteractionSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyboardDevice.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"KeyboardDevice.d.ts","sourceRoot":"","sources":["../src/KeyboardDevice.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,IAAI,IAAI,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAqB;IAErC,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAMvC,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAIrC,IAAI,IAAI,IAAI;IAIZ,YAAY,IAAI;QAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KAAE;IAIlG,QAAQ,IAAI,IAAI;CAGjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyboardDevice.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"KeyboardDevice.js","sourceRoot":"","sources":["../src/KeyboardDevice.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,cAAc;IACjB,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5B,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,OAAO,CAAC,KAAwB;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAwB;QAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,YAAY;QACV,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF"}
|