@jolly-pixel/engine 1.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/README.md +209 -0
- package/dist/actor/Actor.d.ts +39 -0
- package/dist/actor/Actor.d.ts.map +1 -0
- package/dist/actor/Actor.js +171 -0
- package/dist/actor/Actor.js.map +1 -0
- package/dist/actor/ActorComponent.d.ts +19 -0
- package/dist/actor/ActorComponent.d.ts.map +1 -0
- package/dist/actor/ActorComponent.js +30 -0
- package/dist/actor/ActorComponent.js.map +1 -0
- package/dist/actor/ActorTree.d.ts +31 -0
- package/dist/actor/ActorTree.d.ts.map +1 -0
- package/dist/actor/ActorTree.js +167 -0
- package/dist/actor/ActorTree.js.map +1 -0
- package/dist/actor/Signal.d.ts +14 -0
- package/dist/actor/Signal.d.ts.map +1 -0
- package/dist/actor/Signal.js +38 -0
- package/dist/actor/Signal.js.map +1 -0
- package/dist/actor/Transform.d.ts +37 -0
- package/dist/actor/Transform.d.ts.map +1 -0
- package/dist/actor/Transform.js +148 -0
- package/dist/actor/Transform.js.map +1 -0
- package/dist/actor/index.d.ts +5 -0
- package/dist/actor/index.d.ts.map +1 -0
- package/dist/actor/index.js +5 -0
- package/dist/actor/index.js.map +1 -0
- package/dist/adapters/canvas.d.ts +7 -0
- package/dist/adapters/canvas.d.ts.map +1 -0
- package/dist/adapters/canvas.js +2 -0
- package/dist/adapters/canvas.js.map +1 -0
- package/dist/adapters/console.d.ts +6 -0
- package/dist/adapters/console.d.ts.map +1 -0
- package/dist/adapters/console.js +2 -0
- package/dist/adapters/console.js.map +1 -0
- package/dist/adapters/document.d.ts +14 -0
- package/dist/adapters/document.d.ts.map +1 -0
- package/dist/adapters/document.js +19 -0
- package/dist/adapters/document.js.map +1 -0
- package/dist/adapters/eventTarget.d.ts +6 -0
- package/dist/adapters/eventTarget.d.ts.map +1 -0
- package/dist/adapters/eventTarget.js +2 -0
- package/dist/adapters/eventTarget.js.map +1 -0
- package/dist/adapters/global.d.ts +8 -0
- package/dist/adapters/global.d.ts.map +1 -0
- package/dist/adapters/global.js +8 -0
- package/dist/adapters/global.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +6 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/navigator.d.ts +9 -0
- package/dist/adapters/navigator.d.ts.map +1 -0
- package/dist/adapters/navigator.js +9 -0
- package/dist/adapters/navigator.js.map +1 -0
- package/dist/adapters/window.d.ts +12 -0
- package/dist/adapters/window.d.ts.map +1 -0
- package/dist/adapters/window.js +11 -0
- package/dist/adapters/window.js.map +1 -0
- package/dist/audio/AudioBackground.d.ts +48 -0
- package/dist/audio/AudioBackground.d.ts.map +1 -0
- package/dist/audio/AudioBackground.js +151 -0
- package/dist/audio/AudioBackground.js.map +1 -0
- package/dist/audio/AudioLibrary.d.ts +6 -0
- package/dist/audio/AudioLibrary.d.ts.map +1 -0
- package/dist/audio/AudioLibrary.js +6 -0
- package/dist/audio/AudioLibrary.js.map +1 -0
- package/dist/audio/AudioManager.d.ts +33 -0
- package/dist/audio/AudioManager.d.ts.map +1 -0
- package/dist/audio/AudioManager.js +47 -0
- package/dist/audio/AudioManager.js.map +1 -0
- package/dist/audio/GlobalAudio.d.ts +20 -0
- package/dist/audio/GlobalAudio.d.ts.map +1 -0
- package/dist/audio/GlobalAudio.js +41 -0
- package/dist/audio/GlobalAudio.js.map +1 -0
- package/dist/audio/internals/AudioBuffer.d.ts +23 -0
- package/dist/audio/internals/AudioBuffer.d.ts.map +1 -0
- package/dist/audio/internals/AudioBuffer.js +28 -0
- package/dist/audio/internals/AudioBuffer.js.map +1 -0
- package/dist/audio/internals/AudioListener.d.ts +5 -0
- package/dist/audio/internals/AudioListener.d.ts.map +1 -0
- package/dist/audio/internals/AudioListener.js +2 -0
- package/dist/audio/internals/AudioListener.js.map +1 -0
- package/dist/audio/internals/AudioService.d.ts +19 -0
- package/dist/audio/internals/AudioService.d.ts.map +1 -0
- package/dist/audio/internals/AudioService.js +36 -0
- package/dist/audio/internals/AudioService.js.map +1 -0
- package/dist/components/camera/Camera3DControls.d.ts +31 -0
- package/dist/components/camera/Camera3DControls.d.ts.map +1 -0
- package/dist/components/camera/Camera3DControls.js +79 -0
- package/dist/components/camera/Camera3DControls.js.map +1 -0
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +5 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/renderers/index.d.ts +14 -0
- package/dist/components/renderers/index.d.ts.map +1 -0
- package/dist/components/renderers/index.js +14 -0
- package/dist/components/renderers/index.js.map +1 -0
- package/dist/components/renderers/model/ModelAnimation.d.ts +21 -0
- package/dist/components/renderers/model/ModelAnimation.d.ts.map +1 -0
- package/dist/components/renderers/model/ModelAnimation.js +84 -0
- package/dist/components/renderers/model/ModelAnimation.js.map +1 -0
- package/dist/components/renderers/model/ModelRenderer.d.ts +24 -0
- package/dist/components/renderers/model/ModelRenderer.d.ts.map +1 -0
- package/dist/components/renderers/model/ModelRenderer.js +49 -0
- package/dist/components/renderers/model/ModelRenderer.js.map +1 -0
- package/dist/components/renderers/model/loader.d.ts +8 -0
- package/dist/components/renderers/model/loader.d.ts.map +1 -0
- package/dist/components/renderers/model/loader.js +112 -0
- package/dist/components/renderers/model/loader.js.map +1 -0
- package/dist/components/renderers/sprite/SpriteAnimation.class.d.ts +33 -0
- package/dist/components/renderers/sprite/SpriteAnimation.class.d.ts.map +1 -0
- package/dist/components/renderers/sprite/SpriteAnimation.class.js +78 -0
- package/dist/components/renderers/sprite/SpriteAnimation.class.js.map +1 -0
- package/dist/components/renderers/sprite/SpriteRenderer.class.d.ts +35 -0
- package/dist/components/renderers/sprite/SpriteRenderer.class.d.ts.map +1 -0
- package/dist/components/renderers/sprite/SpriteRenderer.class.js +76 -0
- package/dist/components/renderers/sprite/SpriteRenderer.class.js.map +1 -0
- package/dist/components/renderers/text/Text3D.class.d.ts +26 -0
- package/dist/components/renderers/text/Text3D.class.d.ts.map +1 -0
- package/dist/components/renderers/text/Text3D.class.js +104 -0
- package/dist/components/renderers/text/Text3D.class.js.map +1 -0
- package/dist/components/renderers/text/TextRenderer.class.d.ts +15 -0
- package/dist/components/renderers/text/TextRenderer.class.d.ts.map +1 -0
- package/dist/components/renderers/text/TextRenderer.class.js +47 -0
- package/dist/components/renderers/text/TextRenderer.class.js.map +1 -0
- package/dist/components/renderers/text/loader.d.ts +4 -0
- package/dist/components/renderers/text/loader.d.ts.map +1 -0
- package/dist/components/renderers/text/loader.js +14 -0
- package/dist/components/renderers/text/loader.js.map +1 -0
- package/dist/components/renderers/tiled/TileLayer.d.ts +13 -0
- package/dist/components/renderers/tiled/TileLayer.d.ts.map +1 -0
- package/dist/components/renderers/tiled/TileLayer.js +34 -0
- package/dist/components/renderers/tiled/TileLayer.js.map +1 -0
- package/dist/components/renderers/tiled/TileMapRenderer.d.ts +15 -0
- package/dist/components/renderers/tiled/TileMapRenderer.d.ts.map +1 -0
- package/dist/components/renderers/tiled/TileMapRenderer.js +59 -0
- package/dist/components/renderers/tiled/TileMapRenderer.js.map +1 -0
- package/dist/components/renderers/tiled/TileObject.d.ts +18 -0
- package/dist/components/renderers/tiled/TileObject.d.ts.map +1 -0
- package/dist/components/renderers/tiled/TileObject.js +59 -0
- package/dist/components/renderers/tiled/TileObject.js.map +1 -0
- package/dist/components/renderers/tiled/TileSet.d.ts +27 -0
- package/dist/components/renderers/tiled/TileSet.d.ts.map +1 -0
- package/dist/components/renderers/tiled/TileSet.js +116 -0
- package/dist/components/renderers/tiled/TileSet.js.map +1 -0
- package/dist/components/renderers/tiled/loader.d.ts +13 -0
- package/dist/components/renderers/tiled/loader.d.ts.map +1 -0
- package/dist/components/renderers/tiled/loader.js +39 -0
- package/dist/components/renderers/tiled/loader.js.map +1 -0
- package/dist/components/renderers/tiled/types.d.ts +325 -0
- package/dist/components/renderers/tiled/types.d.ts.map +1 -0
- package/dist/components/renderers/tiled/types.js +18 -0
- package/dist/components/renderers/tiled/types.js.map +1 -0
- package/dist/components/script/Behavior.d.ts +16 -0
- package/dist/components/script/Behavior.d.ts.map +1 -0
- package/dist/components/script/Behavior.js +52 -0
- package/dist/components/script/Behavior.js.map +1 -0
- package/dist/components/script/BehaviorDecorators.d.ts +29 -0
- package/dist/components/script/BehaviorDecorators.d.ts.map +1 -0
- package/dist/components/script/BehaviorDecorators.js +47 -0
- package/dist/components/script/BehaviorDecorators.js.map +1 -0
- package/dist/components/script/BehaviorInitializer.d.ts +15 -0
- package/dist/components/script/BehaviorInitializer.d.ts.map +1 -0
- package/dist/components/script/BehaviorInitializer.js +103 -0
- package/dist/components/script/BehaviorInitializer.js.map +1 -0
- package/dist/components/types.d.ts +12 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/components/types.js +3 -0
- package/dist/components/types.js.map +1 -0
- package/dist/controls/AtomicInput.d.ts +17 -0
- package/dist/controls/AtomicInput.d.ts.map +1 -0
- package/dist/controls/AtomicInput.js +69 -0
- package/dist/controls/AtomicInput.js.map +1 -0
- package/dist/controls/CombinedInput.d.ts +54 -0
- package/dist/controls/CombinedInput.d.ts.map +1 -0
- package/dist/controls/CombinedInput.js +119 -0
- package/dist/controls/CombinedInput.js.map +1 -0
- package/dist/controls/Input.class.d.ts +93 -0
- package/dist/controls/Input.class.d.ts.map +1 -0
- package/dist/controls/Input.class.js +334 -0
- package/dist/controls/Input.class.js.map +1 -0
- package/dist/controls/devices/Gamepad.class.d.ts +98 -0
- package/dist/controls/devices/Gamepad.class.d.ts.map +1 -0
- package/dist/controls/devices/Gamepad.class.js +275 -0
- package/dist/controls/devices/Gamepad.class.js.map +1 -0
- package/dist/controls/devices/Mouse.class.d.ts +80 -0
- package/dist/controls/devices/Mouse.class.d.ts.map +1 -0
- package/dist/controls/devices/Mouse.class.js +260 -0
- package/dist/controls/devices/Mouse.class.js.map +1 -0
- package/dist/controls/devices/Screen.d.ts +27 -0
- package/dist/controls/devices/Screen.d.ts.map +1 -0
- package/dist/controls/devices/Screen.js +61 -0
- package/dist/controls/devices/Screen.js.map +1 -0
- package/dist/controls/devices/Touchpad.class.d.ts +61 -0
- package/dist/controls/devices/Touchpad.class.d.ts.map +1 -0
- package/dist/controls/devices/Touchpad.class.js +149 -0
- package/dist/controls/devices/Touchpad.class.js.map +1 -0
- package/dist/controls/devices/index.d.ts +6 -0
- package/dist/controls/devices/index.d.ts.map +1 -0
- package/dist/controls/devices/index.js +6 -0
- package/dist/controls/devices/index.js.map +1 -0
- package/dist/controls/devices/keyboard/Keyboard.class.d.ts +37 -0
- package/dist/controls/devices/keyboard/Keyboard.class.d.ts.map +1 -0
- package/dist/controls/devices/keyboard/Keyboard.class.js +135 -0
- package/dist/controls/devices/keyboard/Keyboard.class.js.map +1 -0
- package/dist/controls/devices/keyboard/code.d.ts +9 -0
- package/dist/controls/devices/keyboard/code.d.ts.map +1 -0
- package/dist/controls/devices/keyboard/code.js +13 -0
- package/dist/controls/devices/keyboard/code.js.map +1 -0
- package/dist/controls/devices/keyboard/transformers/alphabet.d.ts +31 -0
- package/dist/controls/devices/keyboard/transformers/alphabet.d.ts.map +1 -0
- package/dist/controls/devices/keyboard/transformers/alphabet.js +34 -0
- package/dist/controls/devices/keyboard/transformers/alphabet.js.map +1 -0
- package/dist/controls/devices/keyboard/transformers/numeric.d.ts +15 -0
- package/dist/controls/devices/keyboard/transformers/numeric.d.ts.map +1 -0
- package/dist/controls/devices/keyboard/transformers/numeric.js +18 -0
- package/dist/controls/devices/keyboard/transformers/numeric.js.map +1 -0
- package/dist/controls/types.d.ts +23 -0
- package/dist/controls/types.d.ts.map +1 -0
- package/dist/controls/types.js +2 -0
- package/dist/controls/types.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/systems/FixedTimeStep.d.ts +16 -0
- package/dist/systems/FixedTimeStep.d.ts.map +1 -0
- package/dist/systems/FixedTimeStep.js +41 -0
- package/dist/systems/FixedTimeStep.js.map +1 -0
- package/dist/systems/GameInstance.d.ts +30 -0
- package/dist/systems/GameInstance.d.ts.map +1 -0
- package/dist/systems/GameInstance.js +54 -0
- package/dist/systems/GameInstance.js.map +1 -0
- package/dist/systems/Scene.d.ts +30 -0
- package/dist/systems/Scene.d.ts.map +1 -0
- package/dist/systems/Scene.js +91 -0
- package/dist/systems/Scene.js.map +1 -0
- package/dist/systems/asset/Base.d.ts +18 -0
- package/dist/systems/asset/Base.d.ts.map +1 -0
- package/dist/systems/asset/Base.js +36 -0
- package/dist/systems/asset/Base.js.map +1 -0
- package/dist/systems/asset/Manager.d.ts +21 -0
- package/dist/systems/asset/Manager.d.ts.map +1 -0
- package/dist/systems/asset/Manager.js +68 -0
- package/dist/systems/asset/Manager.js.map +1 -0
- package/dist/systems/asset/Queue.d.ts +8 -0
- package/dist/systems/asset/Queue.d.ts.map +1 -0
- package/dist/systems/asset/Queue.js +17 -0
- package/dist/systems/asset/Queue.js.map +1 -0
- package/dist/systems/asset/Registry.d.ts +17 -0
- package/dist/systems/asset/Registry.d.ts.map +1 -0
- package/dist/systems/asset/Registry.js +23 -0
- package/dist/systems/asset/Registry.js.map +1 -0
- package/dist/systems/index.d.ts +9 -0
- package/dist/systems/index.d.ts.map +1 -0
- package/dist/systems/index.js +8 -0
- package/dist/systems/index.js.map +1 -0
- package/dist/systems/rendering/GameRenderer.d.ts +18 -0
- package/dist/systems/rendering/GameRenderer.d.ts.map +1 -0
- package/dist/systems/rendering/GameRenderer.js +3 -0
- package/dist/systems/rendering/GameRenderer.js.map +1 -0
- package/dist/systems/rendering/RenderStrategy.d.ts +24 -0
- package/dist/systems/rendering/RenderStrategy.d.ts.map +1 -0
- package/dist/systems/rendering/RenderStrategy.js +38 -0
- package/dist/systems/rendering/RenderStrategy.js.map +1 -0
- package/dist/systems/rendering/ThreeRenderer.d.ts +48 -0
- package/dist/systems/rendering/ThreeRenderer.d.ts.map +1 -0
- package/dist/systems/rendering/ThreeRenderer.js +149 -0
- package/dist/systems/rendering/ThreeRenderer.js.map +1 -0
- package/dist/systems/rendering/index.d.ts +4 -0
- package/dist/systems/rendering/index.d.ts.map +1 -0
- package/dist/systems/rendering/index.js +3 -0
- package/dist/systems/rendering/index.js.map +1 -0
- package/dist/utils/createViewHelper.d.ts +5 -0
- package/dist/utils/createViewHelper.d.ts.map +1 -0
- package/dist/utils/createViewHelper.js +11 -0
- package/dist/utils/createViewHelper.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/loadJSON.d.ts +2 -0
- package/dist/utils/loadJSON.d.ts.map +1 -0
- package/dist/utils/loadJSON.js +15 -0
- package/dist/utils/loadJSON.js.map +1 -0
- package/dist/utils/path.d.ts +9 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +18 -0
- package/dist/utils/path.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EventEmitter } from "@posva/event-emitter";
|
|
2
|
+
import { type DocumentAdapter, type CanvasAdapter } from "../../adapters/index.ts";
|
|
3
|
+
import type { InputConnectable } from "../types.ts";
|
|
4
|
+
export type FullscreenState = "active" | "suspended";
|
|
5
|
+
export type ScreenEvents = {
|
|
6
|
+
stateChange: [FullscreenState];
|
|
7
|
+
};
|
|
8
|
+
export interface ScreenOptions {
|
|
9
|
+
canvas: CanvasAdapter;
|
|
10
|
+
documentAdapter?: DocumentAdapter;
|
|
11
|
+
}
|
|
12
|
+
export declare class Screen extends EventEmitter<ScreenEvents> implements InputConnectable {
|
|
13
|
+
#private;
|
|
14
|
+
wantsFullscreen: boolean;
|
|
15
|
+
wasFullscreen: boolean;
|
|
16
|
+
constructor(options: ScreenOptions);
|
|
17
|
+
connect(): void;
|
|
18
|
+
disconnect(): void;
|
|
19
|
+
reset(): void;
|
|
20
|
+
enter(): void;
|
|
21
|
+
exit(): void;
|
|
22
|
+
private onFullscreenChange;
|
|
23
|
+
private onFullscreenError;
|
|
24
|
+
onMouseDown: () => void;
|
|
25
|
+
onMouseUp: () => void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=Screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.d.ts","sourceRoot":"","sources":["../../../src/controls/devices/Screen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,CAAC,eAAe,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,qBAAa,MAAO,SAAQ,YAAY,CACtC,YAAY,CACZ,YAAW,gBAAgB;;IAI3B,eAAe,UAAS;IACxB,aAAa,UAAS;gBAGpB,OAAO,EAAE,aAAa;IAYxB,OAAO;IAaP,UAAU;IAaV,KAAK;IAKL,KAAK;IAIL,IAAI;IAOJ,OAAO,CAAC,kBAAkB,CAMxB;IAEF,OAAO,CAAC,iBAAiB,CAKvB;IAEF,WAAW,aAIT;IAEF,SAAS,aAIP;CACH"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Import Third-party Dependencies
|
|
2
|
+
import { EventEmitter } from "@posva/event-emitter";
|
|
3
|
+
// Import Internal Dependencies
|
|
4
|
+
import { BrowserDocumentAdapter } from "../../adapters/index.js";
|
|
5
|
+
export class Screen extends EventEmitter {
|
|
6
|
+
#canvas;
|
|
7
|
+
#documentAdapter;
|
|
8
|
+
wantsFullscreen = false;
|
|
9
|
+
wasFullscreen = false;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super();
|
|
12
|
+
const { canvas, documentAdapter = new BrowserDocumentAdapter() } = options;
|
|
13
|
+
this.#canvas = canvas;
|
|
14
|
+
this.#documentAdapter = documentAdapter;
|
|
15
|
+
}
|
|
16
|
+
connect() {
|
|
17
|
+
this.#documentAdapter.addEventListener("fullscreenchange", this.onFullscreenChange, false);
|
|
18
|
+
this.#documentAdapter.addEventListener("fullscreenerror", this.onFullscreenError, false);
|
|
19
|
+
}
|
|
20
|
+
disconnect() {
|
|
21
|
+
this.#documentAdapter.removeEventListener("fullscreenchange", this.onFullscreenChange, false);
|
|
22
|
+
this.#documentAdapter.removeEventListener("fullscreenerror", this.onFullscreenError, false);
|
|
23
|
+
}
|
|
24
|
+
reset() {
|
|
25
|
+
this.wantsFullscreen = false;
|
|
26
|
+
this.wasFullscreen = false;
|
|
27
|
+
}
|
|
28
|
+
enter() {
|
|
29
|
+
this.wantsFullscreen = true;
|
|
30
|
+
}
|
|
31
|
+
exit() {
|
|
32
|
+
this.reset();
|
|
33
|
+
if (this.#documentAdapter.fullscreenElement === this.#canvas) {
|
|
34
|
+
this.#documentAdapter.exitFullscreen();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
onFullscreenChange = () => {
|
|
38
|
+
const isFullscreen = this.#documentAdapter.fullscreenElement === this.#canvas;
|
|
39
|
+
if (this.wasFullscreen !== isFullscreen) {
|
|
40
|
+
this.emit("stateChange", isFullscreen ? "active" : "suspended");
|
|
41
|
+
this.wasFullscreen = isFullscreen;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
onFullscreenError = () => {
|
|
45
|
+
if (this.wasFullscreen) {
|
|
46
|
+
this.emit("stateChange", "suspended");
|
|
47
|
+
this.wasFullscreen = false;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
onMouseDown = () => {
|
|
51
|
+
if (this.wantsFullscreen && !this.wasFullscreen) {
|
|
52
|
+
this.#canvas.requestFullscreen();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
onMouseUp = () => {
|
|
56
|
+
if (this.wantsFullscreen && !this.wasFullscreen) {
|
|
57
|
+
this.#canvas.requestFullscreen();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=Screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.js","sourceRoot":"","sources":["../../../src/controls/devices/Screen.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,+BAA+B;AAC/B,OAAO,EACL,sBAAsB,EAGvB,MAAM,yBAAyB,CAAC;AAcjC,MAAM,OAAO,MAAO,SAAQ,YAE3B;IACC,OAAO,CAAgB;IACvB,gBAAgB,CAAkB;IAElC,eAAe,GAAG,KAAK,CAAC;IACxB,aAAa,GAAG,KAAK,CAAC;IAEtB,YACE,OAAsB;QAEtB,KAAK,EAAE,CAAC;QACR,MAAM,EACJ,MAAM,EACN,eAAe,GAAG,IAAI,sBAAsB,EAAE,EAC/C,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAC1C,CAAC;IAED,OAAO;QACL,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CACpC,kBAAkB,EAClB,IAAI,CAAC,kBAAkB,EACvB,KAAK,CACN,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CACpC,iBAAiB,EACjB,IAAI,CAAC,iBAAiB,EACtB,KAAK,CACN,CAAC;IACJ,CAAC;IAED,UAAU;QACR,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CACvC,kBAAkB,EAClB,IAAI,CAAC,kBAAkB,EACvB,KAAK,CACN,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CACvC,iBAAiB,EACjB,IAAI,CAAC,iBAAiB,EACtB,KAAK,CACN,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,KAAM,IAAI,CAAC,OAAe,EAAE,CAAC;YACtE,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,kBAAkB,GAAG,GAAG,EAAE;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,KAAM,IAAI,CAAC,OAAe,CAAC;QACvF,IAAI,IAAI,CAAC,aAAa,KAAK,YAAY,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;IAEM,iBAAiB,GAAG,GAAG,EAAE;QAC/B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,WAAW,GAAG,GAAG,EAAE;QACjB,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,GAAG,GAAG,EAAE;QACf,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;CACH"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { EventEmitter } from "@posva/event-emitter";
|
|
2
|
+
import type { CanvasAdapter } from "../../adapters/canvas.ts";
|
|
3
|
+
import type { InputControl } from "../types.ts";
|
|
4
|
+
export declare const TouchIdentifier: {
|
|
5
|
+
readonly primary: 0;
|
|
6
|
+
readonly secondary: 1;
|
|
7
|
+
readonly tertiary: 2;
|
|
8
|
+
};
|
|
9
|
+
export type TouchAction = number | keyof typeof TouchIdentifier;
|
|
10
|
+
export type TouchPosition = {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
};
|
|
14
|
+
export type TouchEvents = {
|
|
15
|
+
start: [Touch, TouchPosition];
|
|
16
|
+
move: [Touch, TouchPosition];
|
|
17
|
+
end: [Touch];
|
|
18
|
+
};
|
|
19
|
+
export interface TouchState {
|
|
20
|
+
isDown: boolean;
|
|
21
|
+
wasStarted: boolean;
|
|
22
|
+
wasEnded: boolean;
|
|
23
|
+
position: {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface TouchpadOptions {
|
|
29
|
+
canvas: CanvasAdapter;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Touchpad input handler supporting multi-touch gestures.
|
|
33
|
+
*
|
|
34
|
+
* Touch identifiers are assigned by the browser sequentially as fingers touch the screen.
|
|
35
|
+
* The first touch is typically identifier 0, second is 1, etc.
|
|
36
|
+
* Identifiers may be reused after a touch ends.
|
|
37
|
+
*
|
|
38
|
+
* @see https://www.w3.org/TR/touch-events/
|
|
39
|
+
* @see https://docs.google.com/document/d/12-HPlSIF7-ISY8TQHtuQ3IqDi-isZVI0Yzv5zwl90VU/edit?tab=t.0
|
|
40
|
+
*/
|
|
41
|
+
export declare class Touchpad extends EventEmitter<TouchEvents> implements InputControl {
|
|
42
|
+
#private;
|
|
43
|
+
static readonly MaxTouches = 10;
|
|
44
|
+
touches: TouchState[];
|
|
45
|
+
touchesDown: boolean[];
|
|
46
|
+
constructor(options: TouchpadOptions);
|
|
47
|
+
get wasActive(): boolean;
|
|
48
|
+
connect(): void;
|
|
49
|
+
disconnect(): void;
|
|
50
|
+
get isOneFingerGesture(): boolean;
|
|
51
|
+
get isTwoFingerGesture(): boolean;
|
|
52
|
+
get isThreeFingerGesture(): boolean;
|
|
53
|
+
getTouchState(identifier: TouchAction): TouchState;
|
|
54
|
+
reset(): void;
|
|
55
|
+
update(): void;
|
|
56
|
+
private onTouchStart;
|
|
57
|
+
private onTouchEnd;
|
|
58
|
+
private onTouchCancel;
|
|
59
|
+
private onTouchMove;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=Touchpad.class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Touchpad.class.d.ts","sourceRoot":"","sources":["../../../src/controls/devices/Touchpad.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,eAAe;;;;CAOlB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,OAAO,eAAe,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7B,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;KAAE,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAS,SAAQ,YAAY,CACxC,WAAW,CACX,YAAW,YAAY;;IACvB,MAAM,CAAC,QAAQ,CAAC,UAAU,MAAM;IAKhC,OAAO,EAAE,UAAU,EAAE,CAAM;IAC3B,WAAW,EAAE,OAAO,EAAE,CAAM;gBAG1B,OAAO,EAAE,eAAe;IAW1B,IAAI,SAAS,YAEZ;IAED,OAAO;IAOP,UAAU;IAOV,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,IAAI,kBAAkB,IAAI,OAAO,CAKhC;IAED,IAAI,oBAAoB,IAAI,OAAO,CAMlC;IAED,aAAa,CACX,UAAU,EAAE,WAAW,GACtB,UAAU;IAWb,KAAK;IAeL,MAAM;IAkBN,OAAO,CAAC,YAAY,CAWlB;IAEF,OAAO,CAAC,UAAU,CAShB;IAEF,OAAO,CAAC,aAAa,CASnB;IAEF,OAAO,CAAC,WAAW,CAUjB;CACH"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Import Third-party Dependencies
|
|
2
|
+
import { EventEmitter } from "@posva/event-emitter";
|
|
3
|
+
export const TouchIdentifier = {
|
|
4
|
+
// usually first finger/index
|
|
5
|
+
primary: 0,
|
|
6
|
+
// usually second finger/middle
|
|
7
|
+
secondary: 1,
|
|
8
|
+
// usually third finger/ring
|
|
9
|
+
tertiary: 2
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Touchpad input handler supporting multi-touch gestures.
|
|
13
|
+
*
|
|
14
|
+
* Touch identifiers are assigned by the browser sequentially as fingers touch the screen.
|
|
15
|
+
* The first touch is typically identifier 0, second is 1, etc.
|
|
16
|
+
* Identifiers may be reused after a touch ends.
|
|
17
|
+
*
|
|
18
|
+
* @see https://www.w3.org/TR/touch-events/
|
|
19
|
+
* @see https://docs.google.com/document/d/12-HPlSIF7-ISY8TQHtuQ3IqDi-isZVI0Yzv5zwl90VU/edit?tab=t.0
|
|
20
|
+
*/
|
|
21
|
+
export class Touchpad extends EventEmitter {
|
|
22
|
+
static MaxTouches = 10;
|
|
23
|
+
#canvas;
|
|
24
|
+
#wasActive = false;
|
|
25
|
+
touches = [];
|
|
26
|
+
touchesDown = [];
|
|
27
|
+
constructor(options) {
|
|
28
|
+
super();
|
|
29
|
+
const { canvas } = options;
|
|
30
|
+
this.#canvas = canvas;
|
|
31
|
+
this.reset();
|
|
32
|
+
}
|
|
33
|
+
get wasActive() {
|
|
34
|
+
return this.#wasActive;
|
|
35
|
+
}
|
|
36
|
+
connect() {
|
|
37
|
+
this.#canvas.addEventListener("touchstart", this.onTouchStart);
|
|
38
|
+
this.#canvas.addEventListener("touchend", this.onTouchEnd);
|
|
39
|
+
this.#canvas.addEventListener("touchmove", this.onTouchMove);
|
|
40
|
+
this.#canvas.addEventListener("touchcancel", this.onTouchCancel);
|
|
41
|
+
}
|
|
42
|
+
disconnect() {
|
|
43
|
+
this.#canvas.removeEventListener("touchstart", this.onTouchStart);
|
|
44
|
+
this.#canvas.removeEventListener("touchend", this.onTouchEnd);
|
|
45
|
+
this.#canvas.removeEventListener("touchmove", this.onTouchMove);
|
|
46
|
+
this.#canvas.removeEventListener("touchcancel", this.onTouchCancel);
|
|
47
|
+
}
|
|
48
|
+
get isOneFingerGesture() {
|
|
49
|
+
return this.touchesDown[TouchIdentifier.primary];
|
|
50
|
+
}
|
|
51
|
+
get isTwoFingerGesture() {
|
|
52
|
+
return (this.touchesDown[TouchIdentifier.primary] &&
|
|
53
|
+
this.touchesDown[TouchIdentifier.secondary]);
|
|
54
|
+
}
|
|
55
|
+
get isThreeFingerGesture() {
|
|
56
|
+
return (this.touchesDown[TouchIdentifier.primary] &&
|
|
57
|
+
this.touchesDown[TouchIdentifier.secondary] &&
|
|
58
|
+
this.touchesDown[TouchIdentifier.tertiary]);
|
|
59
|
+
}
|
|
60
|
+
getTouchState(identifier) {
|
|
61
|
+
const finalizedIdentifier = typeof identifier === "string" ?
|
|
62
|
+
TouchIdentifier[identifier] : identifier;
|
|
63
|
+
if (finalizedIdentifier < 0 || finalizedIdentifier >= Touchpad.MaxTouches) {
|
|
64
|
+
throw new Error(`Touch index ${finalizedIdentifier} is out of bounds.`);
|
|
65
|
+
}
|
|
66
|
+
return this.touches[finalizedIdentifier];
|
|
67
|
+
}
|
|
68
|
+
reset() {
|
|
69
|
+
for (let i = 0; i < Touchpad.MaxTouches; i++) {
|
|
70
|
+
this.touches[i] = {
|
|
71
|
+
isDown: false,
|
|
72
|
+
wasStarted: false,
|
|
73
|
+
wasEnded: false,
|
|
74
|
+
position: {
|
|
75
|
+
x: 0,
|
|
76
|
+
y: 0
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
this.touchesDown[i] = false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
update() {
|
|
83
|
+
this.#wasActive = false;
|
|
84
|
+
for (let i = 0; i < this.touches.length; i++) {
|
|
85
|
+
const touch = this.touches[i];
|
|
86
|
+
const wasDown = touch.isDown;
|
|
87
|
+
const isDown = this.touchesDown[i];
|
|
88
|
+
touch.isDown = isDown;
|
|
89
|
+
touch.wasStarted = !wasDown && touch.isDown;
|
|
90
|
+
touch.wasEnded = wasDown && !touch.isDown;
|
|
91
|
+
if (isDown) {
|
|
92
|
+
this.#wasActive = true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
onTouchStart = (event) => {
|
|
97
|
+
event.preventDefault();
|
|
98
|
+
for (const { touch, position } of extractTouchPositions(event)) {
|
|
99
|
+
const { identifier } = touch;
|
|
100
|
+
this.touches[identifier].position.x = position.x;
|
|
101
|
+
this.touches[identifier].position.y = position.y;
|
|
102
|
+
this.touchesDown[identifier] = true;
|
|
103
|
+
this.emit("start", touch, position);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
onTouchEnd = (event) => {
|
|
107
|
+
event.preventDefault();
|
|
108
|
+
for (let i = 0; i < event.changedTouches.length; i++) {
|
|
109
|
+
const touch = event.changedTouches[i];
|
|
110
|
+
this.touchesDown[touch.identifier] = false;
|
|
111
|
+
this.emit("end", touch);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
onTouchCancel = (event) => {
|
|
115
|
+
event.preventDefault();
|
|
116
|
+
for (let i = 0; i < event.changedTouches.length; i++) {
|
|
117
|
+
const touch = event.changedTouches[i];
|
|
118
|
+
this.touchesDown[touch.identifier] = false;
|
|
119
|
+
this.emit("end", touch);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
onTouchMove = (event) => {
|
|
123
|
+
event.preventDefault();
|
|
124
|
+
for (const { touch, position } of extractTouchPositions(event)) {
|
|
125
|
+
const { identifier } = touch;
|
|
126
|
+
this.touches[identifier].position.x = position.x;
|
|
127
|
+
this.touches[identifier].position.y = position.y;
|
|
128
|
+
this.emit("move", touch, position);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function* extractTouchPositions(event) {
|
|
133
|
+
if (!event.target) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const rect = event.target.getBoundingClientRect();
|
|
137
|
+
for (let i = 0; i < event.changedTouches.length; i++) {
|
|
138
|
+
const touch = event.changedTouches[i];
|
|
139
|
+
if (touch.identifier >= Touchpad.MaxTouches) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const position = {
|
|
143
|
+
x: touch.clientX - rect.left,
|
|
144
|
+
y: touch.clientY - rect.top
|
|
145
|
+
};
|
|
146
|
+
yield { touch, position };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=Touchpad.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Touchpad.class.js","sourceRoot":"","sources":["../../../src/controls/devices/Touchpad.class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/controls/devices/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/controls/devices/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EventEmitter } from "@posva/event-emitter";
|
|
2
|
+
import type { InputControl } from "../../types.ts";
|
|
3
|
+
import { type DocumentAdapter } from "../../../adapters/index.ts";
|
|
4
|
+
export type KeyboardEvents = {
|
|
5
|
+
down: [event: KeyboardEvent];
|
|
6
|
+
up: [event: KeyboardEvent];
|
|
7
|
+
press: [event: KeyboardEvent];
|
|
8
|
+
[key: string]: [event: KeyboardEvent];
|
|
9
|
+
};
|
|
10
|
+
export interface KeyState {
|
|
11
|
+
isDown: boolean;
|
|
12
|
+
wasJustPressed: boolean;
|
|
13
|
+
wasJustAutoRepeated: boolean;
|
|
14
|
+
wasJustReleased: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface KeyboardOptions {
|
|
17
|
+
documentAdapter?: DocumentAdapter;
|
|
18
|
+
}
|
|
19
|
+
export declare class Keyboard extends EventEmitter<KeyboardEvents> implements InputControl {
|
|
20
|
+
#private;
|
|
21
|
+
buttons: Map<string, KeyState>;
|
|
22
|
+
buttonsDown: Set<string>;
|
|
23
|
+
autoRepeatedCode: string | null;
|
|
24
|
+
char: string;
|
|
25
|
+
newChar: string;
|
|
26
|
+
constructor(options?: KeyboardOptions);
|
|
27
|
+
get wasActive(): boolean;
|
|
28
|
+
connect(): void;
|
|
29
|
+
disconnect(): void;
|
|
30
|
+
reset(): void;
|
|
31
|
+
private onKeyDown;
|
|
32
|
+
private onKeyPress;
|
|
33
|
+
private onKeyUp;
|
|
34
|
+
update(): void;
|
|
35
|
+
}
|
|
36
|
+
export type { KeyCode, ExtendedKeyCode } from "./code.ts";
|
|
37
|
+
//# sourceMappingURL=Keyboard.class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Keyboard.class.d.ts","sourceRoot":"","sources":["../../../../src/controls/devices/keyboard/Keyboard.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EACV,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AA0CpC,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7B,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,qBAAa,QAAS,SAAQ,YAAY,CACxC,cAAc,CACd,YAAW,YAAY;;IAIvB,OAAO,wBAA+B;IACtC,WAAW,cAAqB;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,IAAI,SAAM;IACV,OAAO,SAAM;gBAGX,OAAO,GAAE,eAAoB;IAW/B,IAAI,SAAS,YAEZ;IAED,OAAO;IAMP,UAAU;IAMV,KAAK;IAQL,OAAO,CAAC,SAAS,CAyBf;IAEF,OAAO,CAAC,UAAU,CAKhB;IAEF,OAAO,CAAC,OAAO,CAGb;IAEF,MAAM;CA6BP;AAED,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// Import Third-party Dependencies
|
|
2
|
+
import { EventEmitter } from "@posva/event-emitter";
|
|
3
|
+
import { BrowserDocumentAdapter } from "../../../adapters/index.js";
|
|
4
|
+
// CONSTANTS
|
|
5
|
+
const kControlKeys = new Set([
|
|
6
|
+
"ArrowUp",
|
|
7
|
+
"ArrowDown",
|
|
8
|
+
"ArrowLeft",
|
|
9
|
+
"ArrowRight",
|
|
10
|
+
"PageUp",
|
|
11
|
+
"PageDown",
|
|
12
|
+
"Home",
|
|
13
|
+
"End",
|
|
14
|
+
"Insert",
|
|
15
|
+
"Delete",
|
|
16
|
+
"Tab",
|
|
17
|
+
"Escape",
|
|
18
|
+
"F1",
|
|
19
|
+
"F2",
|
|
20
|
+
"F3",
|
|
21
|
+
"F4",
|
|
22
|
+
"F5",
|
|
23
|
+
"F6",
|
|
24
|
+
"F7",
|
|
25
|
+
"F8",
|
|
26
|
+
"F9",
|
|
27
|
+
"F10",
|
|
28
|
+
"F11",
|
|
29
|
+
"F12",
|
|
30
|
+
"F13",
|
|
31
|
+
"F14",
|
|
32
|
+
"F15",
|
|
33
|
+
"F16",
|
|
34
|
+
"F17",
|
|
35
|
+
"F18",
|
|
36
|
+
"F19",
|
|
37
|
+
"F20",
|
|
38
|
+
"F21",
|
|
39
|
+
"F22",
|
|
40
|
+
"F23",
|
|
41
|
+
"F24"
|
|
42
|
+
]);
|
|
43
|
+
export class Keyboard extends EventEmitter {
|
|
44
|
+
#documentAdapter;
|
|
45
|
+
#wasActive = false;
|
|
46
|
+
buttons = new Map();
|
|
47
|
+
buttonsDown = new Set();
|
|
48
|
+
autoRepeatedCode = null;
|
|
49
|
+
char = "";
|
|
50
|
+
newChar = "";
|
|
51
|
+
constructor(options = {}) {
|
|
52
|
+
super();
|
|
53
|
+
const { documentAdapter = new BrowserDocumentAdapter() } = options;
|
|
54
|
+
this.reset();
|
|
55
|
+
this.#documentAdapter = documentAdapter;
|
|
56
|
+
}
|
|
57
|
+
get wasActive() {
|
|
58
|
+
return this.#wasActive;
|
|
59
|
+
}
|
|
60
|
+
connect() {
|
|
61
|
+
this.#documentAdapter.addEventListener("keydown", this.onKeyDown);
|
|
62
|
+
this.#documentAdapter.addEventListener("keypress", this.onKeyPress);
|
|
63
|
+
this.#documentAdapter.addEventListener("keyup", this.onKeyUp);
|
|
64
|
+
}
|
|
65
|
+
disconnect() {
|
|
66
|
+
this.#documentAdapter.removeEventListener("keydown", this.onKeyDown);
|
|
67
|
+
this.#documentAdapter.removeEventListener("keypress", this.onKeyPress);
|
|
68
|
+
this.#documentAdapter.removeEventListener("keyup", this.onKeyUp);
|
|
69
|
+
}
|
|
70
|
+
reset() {
|
|
71
|
+
this.buttons.clear();
|
|
72
|
+
this.buttonsDown.clear();
|
|
73
|
+
this.char = "";
|
|
74
|
+
this.newChar = "";
|
|
75
|
+
this.autoRepeatedCode = null;
|
|
76
|
+
}
|
|
77
|
+
onKeyDown = (event) => {
|
|
78
|
+
const isControlKey = kControlKeys.has(event.code);
|
|
79
|
+
if (isControlKey) {
|
|
80
|
+
event.preventDefault();
|
|
81
|
+
}
|
|
82
|
+
if (!this.buttons.has(event.code)) {
|
|
83
|
+
this.buttons.set(event.code, {
|
|
84
|
+
isDown: false,
|
|
85
|
+
wasJustPressed: false,
|
|
86
|
+
wasJustAutoRepeated: false,
|
|
87
|
+
wasJustReleased: false
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (this.buttonsDown.has(event.code)) {
|
|
91
|
+
this.autoRepeatedCode = event.code;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this.buttonsDown.add(event.code);
|
|
95
|
+
}
|
|
96
|
+
this.emit("down", event);
|
|
97
|
+
this.emit(event.code, event);
|
|
98
|
+
return !isControlKey;
|
|
99
|
+
};
|
|
100
|
+
onKeyPress = (event) => {
|
|
101
|
+
if (event.key.length === 1 && event.key.charCodeAt(0) >= 32) {
|
|
102
|
+
this.newChar += event.key;
|
|
103
|
+
this.emit("press", event);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
onKeyUp = (event) => {
|
|
107
|
+
this.buttonsDown.delete(event.code);
|
|
108
|
+
this.emit("up", event);
|
|
109
|
+
};
|
|
110
|
+
update() {
|
|
111
|
+
this.#wasActive = false;
|
|
112
|
+
for (const [code, keyState] of this.buttons) {
|
|
113
|
+
const wasDown = keyState.isDown;
|
|
114
|
+
const isDown = this.buttonsDown.has(code);
|
|
115
|
+
keyState.isDown = isDown;
|
|
116
|
+
keyState.wasJustPressed = !wasDown && keyState.isDown;
|
|
117
|
+
keyState.wasJustAutoRepeated = false;
|
|
118
|
+
keyState.wasJustReleased = wasDown && !keyState.isDown;
|
|
119
|
+
if (isDown) {
|
|
120
|
+
this.#wasActive = true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (this.autoRepeatedCode !== null) {
|
|
124
|
+
const keyState = this.buttons.get(this.autoRepeatedCode);
|
|
125
|
+
if (keyState) {
|
|
126
|
+
keyState.wasJustAutoRepeated = true;
|
|
127
|
+
this.#wasActive = true;
|
|
128
|
+
}
|
|
129
|
+
this.autoRepeatedCode = null;
|
|
130
|
+
}
|
|
131
|
+
this.char = this.newChar;
|
|
132
|
+
this.newChar = "";
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=Keyboard.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Keyboard.class.js","sourceRoot":"","sources":["../../../../src/controls/devices/keyboard/Keyboard.class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Alphabet } from "./transformers/alphabet.ts";
|
|
2
|
+
import { type Numeric } from "./transformers/numeric.ts";
|
|
3
|
+
/**
|
|
4
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values
|
|
5
|
+
*/
|
|
6
|
+
export type KeyCode = "Digit0" | "Digit1" | "Digit2" | "Digit3" | "Digit4" | "Digit5" | "Digit6" | "Digit7" | "Digit8" | "Digit9" | "Minus" | "Equal" | "Backspace" | "Tab" | "Comma" | "Period" | "Slash" | "Space" | "CapsLock" | "KeyA" | "KeyS" | "KeyD" | "KeyF" | "KeyG" | "KeyH" | "KeyJ" | "KeyK" | "KeyL" | "KeyQ" | "KeyW" | "KeyE" | "KeyR" | "KeyT" | "KeyY" | "KeyU" | "KeyI" | "KeyO" | "KeyP" | "KeyZ" | "KeyX" | "KeyC" | "KeyV" | "KeyB" | "KeyN" | "KeyM" | "BracketLeft" | "BracketRight" | "Enter" | "Semicolon" | "Quote" | "Backquote" | "Backslash" | "ContextMenu" | "Delete" | "Insert" | "Home" | "End" | "PageUp" | "PageDown" | "ArrowLeft" | "ArrowUp" | "ArrowRight" | "ArrowDown" | "ShiftRight" | "ShiftLeft" | "IntlBackslash" | "F1" | "F2" | "F3" | "F4" | "F5" | "F6" | "F7" | "F8" | "F9" | "F10" | "F11" | "F12" | "F13" | "F14" | "F15" | "F16" | "F17" | "F18" | "F19" | "F20" | "F21" | "F22" | "F23" | "F24" | "NumLock" | "ScrollLock" | "NumpadEnter" | "NumpadDivide" | "NumpadMultiply" | "Numpad7" | "Numpad8" | "Numpad9" | "NumpadSubtract" | "Numpad4" | "Numpad5" | "Numpad6" | "NumpadAdd" | "Numpad1" | "Numpad2" | "Numpad3" | "Numpad0" | "NumpadDecimal" | "IntlRo" | "KanaMode" | "Lang1" | "Lang2" | "ControlRight" | "ControlLeft" | "AltRight" | "AltLeft" | "MetaLeft" | "MetaRight" | "Fn" | "FnLock" | "AudioVolumeMute" | "AudioVolumeUp" | "AudioVolumeDown" | "PrintScreen" | "Pause" | "BrowserBack" | "BrowserForward" | "BrowserFavorites" | "BrowserRefresh" | "BrowserStop" | "BrowserSearch" | "BrowserHome" | "LaunchApp2" | "LaunchApp1" | "MediaPlayPause" | "MediaStop" | "MediaTrackNext" | "MediaTrackPrevious" | "Power" | "Sleep" | "WakeUp";
|
|
7
|
+
export type ExtendedKeyCode = KeyCode | Alphabet | Numeric;
|
|
8
|
+
export declare function mapKeyToExtendedKey(key: ExtendedKeyCode): KeyCode;
|
|
9
|
+
//# sourceMappingURL=code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../../../src/controls/devices/keyboard/code.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAGL,KAAK,OAAO,EACb,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAC3G,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAC7F,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAC9E,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GACvF,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAC5D,aAAa,GAAG,cAAc,GAAG,OAAO,GACxC,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GACjE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAC5D,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GACpD,YAAY,GAAG,WAAW,GAAG,eAAe,GAC5C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GACpF,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAC7F,SAAS,GAAG,YAAY,GACxB,aAAa,GAAG,cAAc,GAAG,gBAAgB,GACjD,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,gBAAgB,GACpD,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAC/C,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,eAAe,GAC/D,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GACzC,cAAc,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAClF,IAAI,GAAG,QAAQ,GACf,iBAAiB,GAAG,eAAe,GAAG,iBAAiB,GACvD,aAAa,GAAG,OAAO,GACvB,aAAa,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,aAAa,GAC1H,YAAY,GAAG,YAAY,GAC3B,gBAAgB,GAAG,WAAW,GAAG,gBAAgB,GAAG,oBAAoB,GACxE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,GACnB,OAAO,CAUT"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Import Internal Dependencies
|
|
2
|
+
import { isAlphabet, ALPHABET_TO_KEY } from "./transformers/alphabet.js";
|
|
3
|
+
import { isNumeric, NUMERIC_TO_KEY } from "./transformers/numeric.js";
|
|
4
|
+
export function mapKeyToExtendedKey(key) {
|
|
5
|
+
if (isAlphabet(key)) {
|
|
6
|
+
return ALPHABET_TO_KEY[key.toUpperCase()];
|
|
7
|
+
}
|
|
8
|
+
if (isNumeric(key)) {
|
|
9
|
+
return NUMERIC_TO_KEY[key];
|
|
10
|
+
}
|
|
11
|
+
return key;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../../../src/controls/devices/keyboard/code.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EACL,UAAU,EACV,eAAe,EAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,SAAS,EACT,cAAc,EAEf,MAAM,2BAA2B,CAAC;AAmCnC,MAAM,UAAU,mBAAmB,CACjC,GAAoB;IAEpB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type Alphabet = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z";
|
|
2
|
+
export declare const ALPHABET_TO_KEY: {
|
|
3
|
+
readonly A: "KeyA";
|
|
4
|
+
readonly B: "KeyB";
|
|
5
|
+
readonly C: "KeyC";
|
|
6
|
+
readonly D: "KeyD";
|
|
7
|
+
readonly E: "KeyE";
|
|
8
|
+
readonly F: "KeyF";
|
|
9
|
+
readonly G: "KeyG";
|
|
10
|
+
readonly H: "KeyH";
|
|
11
|
+
readonly I: "KeyI";
|
|
12
|
+
readonly J: "KeyJ";
|
|
13
|
+
readonly K: "KeyK";
|
|
14
|
+
readonly L: "KeyL";
|
|
15
|
+
readonly M: "KeyM";
|
|
16
|
+
readonly N: "KeyN";
|
|
17
|
+
readonly O: "KeyO";
|
|
18
|
+
readonly P: "KeyP";
|
|
19
|
+
readonly Q: "KeyQ";
|
|
20
|
+
readonly R: "KeyR";
|
|
21
|
+
readonly S: "KeyS";
|
|
22
|
+
readonly T: "KeyT";
|
|
23
|
+
readonly U: "KeyU";
|
|
24
|
+
readonly V: "KeyV";
|
|
25
|
+
readonly W: "KeyW";
|
|
26
|
+
readonly X: "KeyX";
|
|
27
|
+
readonly Y: "KeyY";
|
|
28
|
+
readonly Z: "KeyZ";
|
|
29
|
+
};
|
|
30
|
+
export declare function isAlphabet(char: string): char is Alphabet;
|
|
31
|
+
//# sourceMappingURL=alphabet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alphabet.d.ts","sourceRoot":"","sources":["../../../../../src/controls/devices/keyboard/transformers/alphabet.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAChB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAC3E,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEhF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BlB,CAAC;AAEX,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,QAAQ,CAEzD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// CONSTANTS
|
|
2
|
+
const kAlphabet = new Set("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""));
|
|
3
|
+
export const ALPHABET_TO_KEY = {
|
|
4
|
+
A: "KeyA",
|
|
5
|
+
B: "KeyB",
|
|
6
|
+
C: "KeyC",
|
|
7
|
+
D: "KeyD",
|
|
8
|
+
E: "KeyE",
|
|
9
|
+
F: "KeyF",
|
|
10
|
+
G: "KeyG",
|
|
11
|
+
H: "KeyH",
|
|
12
|
+
I: "KeyI",
|
|
13
|
+
J: "KeyJ",
|
|
14
|
+
K: "KeyK",
|
|
15
|
+
L: "KeyL",
|
|
16
|
+
M: "KeyM",
|
|
17
|
+
N: "KeyN",
|
|
18
|
+
O: "KeyO",
|
|
19
|
+
P: "KeyP",
|
|
20
|
+
Q: "KeyQ",
|
|
21
|
+
R: "KeyR",
|
|
22
|
+
S: "KeyS",
|
|
23
|
+
T: "KeyT",
|
|
24
|
+
U: "KeyU",
|
|
25
|
+
V: "KeyV",
|
|
26
|
+
W: "KeyW",
|
|
27
|
+
X: "KeyX",
|
|
28
|
+
Y: "KeyY",
|
|
29
|
+
Z: "KeyZ"
|
|
30
|
+
};
|
|
31
|
+
export function isAlphabet(char) {
|
|
32
|
+
return kAlphabet.has(char.toUpperCase());
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=alphabet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alphabet.js","sourceRoot":"","sources":["../../../../../src/controls/devices/keyboard/transformers/alphabet.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAMlE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;CACD,CAAC;AAEX,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|