@datamoc/mw_games 0.27.0 → 0.31.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/CHANGELOG.md +76 -0
- package/README.md +2 -1
- package/api-surface.json +162 -0
- package/dist/core/Input.d.ts +7 -0
- package/dist/core/Input.d.ts.map +1 -1
- package/dist/core/Input.js +9 -0
- package/dist/core/Input.js.map +1 -1
- package/dist/mw_games.global.js +113 -113
- package/dist/two-d/render/Beam.d.ts +49 -6
- package/dist/two-d/render/Beam.d.ts.map +1 -1
- package/dist/two-d/render/Beam.js +59 -10
- package/dist/two-d/render/Beam.js.map +1 -1
- package/dist/two-d/render/Camera.d.ts +13 -3
- package/dist/two-d/render/Camera.d.ts.map +1 -1
- package/dist/two-d/render/Camera.js +35 -25
- package/dist/two-d/render/Camera.js.map +1 -1
- package/dist/two-d/render/Flights.d.ts +13 -2
- package/dist/two-d/render/Flights.d.ts.map +1 -1
- package/dist/two-d/render/Flights.js +20 -5
- package/dist/two-d/render/Flights.js.map +1 -1
- package/dist/two-d/render/Particles.d.ts +9 -0
- package/dist/two-d/render/Particles.d.ts.map +1 -1
- package/dist/two-d/render/Particles.js +9 -0
- package/dist/two-d/render/Particles.js.map +1 -1
- package/dist/two-d/render/SpriteMotion.d.ts +121 -0
- package/dist/two-d/render/SpriteMotion.d.ts.map +1 -0
- package/dist/two-d/render/SpriteMotion.js +193 -0
- package/dist/two-d/render/SpriteMotion.js.map +1 -0
- package/dist/two-d/render/index.d.ts +3 -1
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +1 -0
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/two-d/ui/OnScreenKeyboard.d.ts +91 -0
- package/dist/two-d/ui/OnScreenKeyboard.d.ts.map +1 -0
- package/dist/two-d/ui/OnScreenKeyboard.js +109 -0
- package/dist/two-d/ui/OnScreenKeyboard.js.map +1 -0
- package/dist/two-d/ui/TextPrompt.d.ts +7 -0
- package/dist/two-d/ui/TextPrompt.d.ts.map +1 -1
- package/dist/two-d/ui/TextPrompt.js +9 -0
- package/dist/two-d/ui/TextPrompt.js.map +1 -1
- package/dist/two-d/ui/index.d.ts +2 -0
- package/dist/two-d/ui/index.d.ts.map +1 -1
- package/dist/two-d/ui/index.js +1 -0
- package/dist/two-d/ui/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/sbom.cdx.json +6 -6
- package/tools/browser-driver.d.mts +30 -0
- package/tools/browser-driver.mjs +146 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnScreenKeyboard.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/OnScreenKeyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,EAAgC,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIhF,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC3B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,8BAA8B;IAC9B,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;CACtB;AAID;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAehC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAG/C;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IAC1B,GAAG,EAAE,WAAW,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACxD,UAAU,EAAE,CAkBd;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,YAAY,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAkB7D;IAED,4EAA4E;IAC5E,IAAI,aAAa,IAAI,MAAM,CAE1B;CACD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Container } from 'pixi.js';
|
|
2
|
+
import { dispatchAction, dispatchText } from '../../core/Input.js';
|
|
3
|
+
import { Button } from './Button.js';
|
|
4
|
+
import { theme } from './theme.js';
|
|
5
|
+
const letters = (word) => word.split('').map((label) => ({ label }));
|
|
6
|
+
/**
|
|
7
|
+
* One shipped default: the uppercase alphabet over a digit row, then the editing tail
|
|
8
|
+
* (`Bksp`, caret moves, space, `OK`, `Esc`). A game with its own needs - digits only, a
|
|
9
|
+
* seed code's letters and hyphens - authors its own layout; the default exists so a
|
|
10
|
+
* first game does not start from a blank page.
|
|
11
|
+
*/
|
|
12
|
+
export const UPPERCASE_KEYBOARD = {
|
|
13
|
+
rows: [
|
|
14
|
+
letters('QWERTYUIOP'),
|
|
15
|
+
letters('ASDFGHJKL'),
|
|
16
|
+
letters('ZXCVBNM'),
|
|
17
|
+
letters('1234567890'),
|
|
18
|
+
[
|
|
19
|
+
{ label: 'Bksp', action: 'backspace' },
|
|
20
|
+
{ label: 'Left', action: 'left' },
|
|
21
|
+
{ label: 'Right', action: 'right' },
|
|
22
|
+
{ label: 'Space', text: ' ', span: 3 },
|
|
23
|
+
{ label: 'OK', action: 'confirm' },
|
|
24
|
+
{ label: 'Esc', action: 'cancel' },
|
|
25
|
+
],
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* What pressing a key does: a typing key feeds `core.Input`'s `onText`, an action key
|
|
30
|
+
* fires its action through `onAction` - the same two paths a physical key travels, so
|
|
31
|
+
* a prompt or menu cannot tell an on-screen tap from a keyboard press. Pure, so the
|
|
32
|
+
* dispatch semantics are testable without a renderer.
|
|
33
|
+
*/
|
|
34
|
+
export function pressKey(key) {
|
|
35
|
+
if (key.action !== undefined)
|
|
36
|
+
dispatchAction(key.action);
|
|
37
|
+
else
|
|
38
|
+
dispatchText(key.text ?? key.label);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The rows-to-buttons arithmetic as a pure function: a row's span units share its width
|
|
42
|
+
* minus the gaps, wide keys take their units plus the gaps between them, and rows stack
|
|
43
|
+
* at a fixed height. The class below is the thin Button shell over this.
|
|
44
|
+
*/
|
|
45
|
+
export function layoutKeys(layout, options) {
|
|
46
|
+
const laid = [];
|
|
47
|
+
let y = 0;
|
|
48
|
+
for (const row of layout.rows) {
|
|
49
|
+
const units = row.reduce((sum, key) => sum + (key.span ?? 1), 0);
|
|
50
|
+
//a row is span-units wide with a gap between every unit slot, so a span-S key
|
|
51
|
+
//covers S slots plus its internal gaps and the row consumes its width exactly
|
|
52
|
+
const unitWidth = (options.width - options.gap * (units - 1)) / units;
|
|
53
|
+
let x = 0;
|
|
54
|
+
for (const key of row) {
|
|
55
|
+
const span = key.span ?? 1;
|
|
56
|
+
const width = unitWidth * span + options.gap * (span - 1);
|
|
57
|
+
laid.push({ key, x, y, width, height: options.keyHeight });
|
|
58
|
+
x += width + options.gap;
|
|
59
|
+
}
|
|
60
|
+
y += options.keyHeight + options.gap;
|
|
61
|
+
}
|
|
62
|
+
return laid;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* An on-screen keyboard: rows of keys as data, rendered through the theme's own
|
|
66
|
+
* `Button`, each tap pressing its key through `pressKey` - `dispatchText` for a typing
|
|
67
|
+
* key, `dispatchAction` for an action key - so a `TextPrompt` (or any listener of
|
|
68
|
+
* `onText`/`onAction`) cannot tell the tap from a physical key press. Pointer-only
|
|
69
|
+
* devices get a way to type; nothing game-specific lives here.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* import { OnScreenKeyboard, UPPERCASE_KEYBOARD } from '@datamoc/mw_games/two-d/ui';
|
|
74
|
+
* import type { Container2D } from '@datamoc/mw_games/two-d/render';
|
|
75
|
+
*
|
|
76
|
+
* declare const layer: Container2D;
|
|
77
|
+
*
|
|
78
|
+
* const keyboard = new OnScreenKeyboard(UPPERCASE_KEYBOARD, { width: 320 });
|
|
79
|
+
* keyboard.x = 20;
|
|
80
|
+
* keyboard.y = 240;
|
|
81
|
+
* layer.addChild(keyboard);
|
|
82
|
+
* // taps type through core.Input, exactly like a physical key
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export class OnScreenKeyboard extends Container {
|
|
86
|
+
constructor(layout, options) {
|
|
87
|
+
super();
|
|
88
|
+
const gap = theme().spacing;
|
|
89
|
+
const keyHeight = Math.max(theme().font.size * 2, 18);
|
|
90
|
+
let maxY = 0;
|
|
91
|
+
for (const laid of layoutKeys(layout, { width: options.width, keyHeight, gap })) {
|
|
92
|
+
const button = new Button({
|
|
93
|
+
width: laid.width,
|
|
94
|
+
height: laid.height,
|
|
95
|
+
text: laid.key.label,
|
|
96
|
+
onClick: () => pressKey(laid.key),
|
|
97
|
+
});
|
|
98
|
+
button.position.set(laid.x, laid.y);
|
|
99
|
+
this.addChild(button);
|
|
100
|
+
maxY = Math.max(maxY, laid.y + laid.height);
|
|
101
|
+
}
|
|
102
|
+
this.laidOutHeight = maxY;
|
|
103
|
+
}
|
|
104
|
+
/** the laid-out height, so a host window can size itself to the keyboard */
|
|
105
|
+
get contentHeight() {
|
|
106
|
+
return this.laidOutHeight;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=OnScreenKeyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnScreenKeyboard.js","sourceRoot":"","sources":["../../../src/two-d/ui/OnScreenKeyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Action } from '../../core/Input.ts';
|
|
2
2
|
import { Window } from './Window.ts';
|
|
3
3
|
import { type ScreenReader } from './a11y.ts';
|
|
4
|
+
import { type KeyboardLayout } from './OnScreenKeyboard.ts';
|
|
4
5
|
export interface TextPromptOptions {
|
|
5
6
|
width: number;
|
|
6
7
|
height: number;
|
|
@@ -12,6 +13,11 @@ export interface TextPromptOptions {
|
|
|
12
13
|
initialValue?: string;
|
|
13
14
|
/** the most characters the field will hold; unlimited when omitted */
|
|
14
15
|
maxLength?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Rows of keys rendered beneath the field for pointer-only devices, feeding the same
|
|
18
|
+
* `onText`/`onAction` paths a physical key travels. Omit on a keyboard-first platform.
|
|
19
|
+
*/
|
|
20
|
+
keyboard?: KeyboardLayout;
|
|
15
21
|
/**
|
|
16
22
|
* Decides whether the current value may be confirmed: return an error message to
|
|
17
23
|
* keep the prompt open, or null (or '') when the value is fine. Runs only on
|
|
@@ -82,6 +88,7 @@ export declare class TextPrompt extends Window {
|
|
|
82
88
|
private readonly announcer;
|
|
83
89
|
private preview;
|
|
84
90
|
private promptError;
|
|
91
|
+
private readonly keyboard;
|
|
85
92
|
private messageLabel;
|
|
86
93
|
private valueLabel;
|
|
87
94
|
private previewLabel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextPrompt.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/TextPrompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,MAAM,EAAyB,MAAM,qBAAqB,CAAC;AAEhG,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"TextPrompt.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/TextPrompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { Window } from './Window.js';
|
|
|
5
5
|
import { Label } from './Label.js';
|
|
6
6
|
import { theme, themeChanged } from './theme.js';
|
|
7
7
|
import { screenReader } from './a11y.js';
|
|
8
|
+
import { OnScreenKeyboard } from './OnScreenKeyboard.js';
|
|
8
9
|
/** seconds per caret blink half-cycle */
|
|
9
10
|
const BLINK_PERIOD = 0.5;
|
|
10
11
|
/**
|
|
@@ -54,6 +55,7 @@ export class TextPrompt extends Window {
|
|
|
54
55
|
});
|
|
55
56
|
this.preview = '';
|
|
56
57
|
this.promptError = null;
|
|
58
|
+
this.keyboard = null;
|
|
57
59
|
this.messageLabel = null;
|
|
58
60
|
this.caretBar = new Graphics();
|
|
59
61
|
this.measurer = new Label();
|
|
@@ -106,6 +108,13 @@ export class TextPrompt extends Window {
|
|
|
106
108
|
this.errorLabel.y = this.previewLabel.y + this.lineHeight + gap;
|
|
107
109
|
this.content.addChild(this.errorLabel);
|
|
108
110
|
this.content.addChild(this.caretBar);
|
|
111
|
+
//the touch half: rows of keys under the field, sized into the window
|
|
112
|
+
if (options.keyboard) {
|
|
113
|
+
this.keyboard = new OnScreenKeyboard(options.keyboard, { width: this.contentWidth });
|
|
114
|
+
this.keyboard.y = this.errorLabel.y + this.lineHeight + gap;
|
|
115
|
+
this.content.addChild(this.keyboard);
|
|
116
|
+
this.resize(options.width, options.height + this.keyboard.contentHeight + gap);
|
|
117
|
+
}
|
|
109
118
|
onText.add(this.textListener);
|
|
110
119
|
onComposition.add(this.compositionListener);
|
|
111
120
|
themeChanged.add(this.promptThemeListener);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextPrompt.js","sourceRoot":"","sources":["../../../src/two-d/ui/TextPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAsC,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,YAAY,EAAqB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"TextPrompt.js","sourceRoot":"","sources":["../../../src/two-d/ui/TextPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAsC,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,YAAY,EAAqB,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAuB,MAAM,uBAAuB,CAAC;AAE9E,yCAAyC;AACzC,MAAM,YAAY,GAAG,GAAG,CAAC;AA2DzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,OAAO,UAAW,SAAQ,MAAM;IA+CrC,YAAY,OAA0B;QACrC,KAAK,CAAC;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ;SAClC,CAAC,CAAC;QAjDI,YAAO,GAAG,EAAE,CAAC;QACb,gBAAW,GAAkB,IAAI,CAAC;QAEzB,aAAQ,GAA4B,IAAI,CAAC;QAClD,iBAAY,GAAiB,IAAI,CAAC;QAIlC,aAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QACjB,aAAQ,GAAG,IAAI,KAAK,EAAE,CAAC;QAIhC,oBAAe,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC;QAClD,YAAO,GAAG,IAAI,CAAC;QACf,iBAAY,GAAG,CAAC,CAAC;QAER,wBAAmB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAEjD,iBAAY,GAAG,CAAC,IAAY,EAAW,EAAE;YACzD,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACb,CAAC,CAAC;QAEe,wBAAmB,GAAG,CAAC,KAAuB,EAAW,EAAE;YAC3E,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC9B,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;oBAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC,CAAC;QAcD,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC;QAEnD,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAClD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;QAEtB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEvC,IAAI,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzC,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErC,qEAAqE;QACrE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC5C,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9F,CAAC;IAED,+BAA+B;IAC/B,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,qCAAqC;IACrC,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,yEAAyE;IACzE,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAEQ,YAAY,CAAC,MAAc;QACnC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE9B,QAAQ,MAAM,EAAE,CAAC;YAChB,KAAK,MAAM;gBACV,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC;YACb,KAAK,OAAO;gBACX,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC;YACb,KAAK,WAAW;gBACf,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBACxC,OAAO,IAAI,CAAC;YACb,KAAK,QAAQ;gBACZ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC5C,OAAO,IAAI,CAAC;YACb,KAAK,SAAS;gBACb,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACb,KAAK,QAAQ;gBACZ,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC;YACb;gBACC,OAAO,KAAK,CAAC;QACf,CAAC;IACF,CAAC;IAEQ,MAAM,CAAC,EAAU;QACzB,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,YAAY,GAAG,YAAY;YAAE,OAAO;QAC7C,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC;IAC9D,CAAC;IAEQ,OAAO,CAAC,OAA0C;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/C,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,iFAAiF;IACzE,IAAI,CAAC,GAAe;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAChC,GAAG,EAAE,CAAC;QACN,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAEO,OAAO;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QAC1D,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,OAAO;QACR,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAEO,aAAa;QACpB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAEO,MAAM;QACb,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1C,iFAAiF;QACjF,+EAA+E;QAC/E,iFAAiF;QACjF,mCAAmC;QACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACJ,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACR,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC9B,CAAC;QACF,CAAC;QACD,IAAI,CAAC,QAAQ;aACX,KAAK,EAAE;aACP,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;aACjE,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC;QAE7D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAEpD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IACrD,CAAC;CACD"}
|
package/dist/two-d/ui/index.d.ts
CHANGED
|
@@ -31,6 +31,8 @@ export type { ListTab, TabbedListOptions } from './TabbedList.ts';
|
|
|
31
31
|
export { MessageBox } from './MessageBox.ts';
|
|
32
32
|
export type { MessageBoxOptions, MessagePage, Choice } from './MessageBox.ts';
|
|
33
33
|
export { TextPrompt } from './TextPrompt.ts';
|
|
34
|
+
export { OnScreenKeyboard, UPPERCASE_KEYBOARD } from './OnScreenKeyboard.ts';
|
|
35
|
+
export type { KeyboardKey, KeyboardLayout } from './OnScreenKeyboard.ts';
|
|
34
36
|
export type { TextPromptOptions } from './TextPrompt.ts';
|
|
35
37
|
export { VerticalLabel, layoutVertical } from './VerticalLabel.ts';
|
|
36
38
|
export type { VerticalLabelOptions, VerticalLayoutOptions, GlyphLayout } from './VerticalLabel.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/index.ts"],"names":[],"mappings":"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"}
|
package/dist/two-d/ui/index.js
CHANGED
|
@@ -16,6 +16,7 @@ export { IconGrid } from './IconGrid.js';
|
|
|
16
16
|
export { TabbedList } from './TabbedList.js';
|
|
17
17
|
export { MessageBox } from './MessageBox.js';
|
|
18
18
|
export { TextPrompt } from './TextPrompt.js';
|
|
19
|
+
export { OnScreenKeyboard, UPPERCASE_KEYBOARD } from './OnScreenKeyboard.js';
|
|
19
20
|
export { VerticalLabel, layoutVertical } from './VerticalLabel.js';
|
|
20
21
|
export { Slider, sliderFraction, sliderValueAt } from './Slider.js';
|
|
21
22
|
export { Checkbox } from './Checkbox.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/two-d/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5F,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAG3E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEzE,OAAO,EACN,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,WAAW,GACX,MAAM,aAAa,CAAC;AAYrB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGzF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/two-d/ui/index.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* this from `package.json` automatically, chosen because this project's own build already
|
|
10
10
|
* has no step before `tsc`/`vite` that this would need to run ahead of.
|
|
11
11
|
*/
|
|
12
|
-
export declare const version = "0.
|
|
12
|
+
export declare const version = "0.31.0";
|
|
13
13
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* this from `package.json` automatically, chosen because this project's own build already
|
|
10
10
|
* has no step before `tsc`/`vite` that this would need to run ahead of.
|
|
11
11
|
*/
|
|
12
|
-
export const version = '0.
|
|
12
|
+
export const version = '0.31.0';
|
|
13
13
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datamoc/mw_games",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "A local-file game framework: renderer-free game logic, drawn through PixiJS in 2D or Babylon.js in 3D, with mobile and desktop packaging.",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"repository": {
|
package/sbom.cdx.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.6",
|
|
4
|
-
"serialNumber": "urn:uuid:
|
|
4
|
+
"serialNumber": "urn:uuid:e940ba40-96aa-5b25-b857-760f2e6fe55a",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
7
|
"tools": {
|
|
@@ -10,16 +10,16 @@
|
|
|
10
10
|
"type": "application",
|
|
11
11
|
"group": "datamoc",
|
|
12
12
|
"name": "tools/sbom.mjs",
|
|
13
|
-
"version": "0.
|
|
13
|
+
"version": "0.31.0"
|
|
14
14
|
}
|
|
15
15
|
]
|
|
16
16
|
},
|
|
17
17
|
"component": {
|
|
18
18
|
"type": "library",
|
|
19
|
-
"bom-ref": "pkg:npm/%40datamoc/mw_games@0.
|
|
19
|
+
"bom-ref": "pkg:npm/%40datamoc/mw_games@0.31.0",
|
|
20
20
|
"name": "@datamoc/mw_games",
|
|
21
|
-
"version": "0.
|
|
22
|
-
"purl": "pkg:npm/%40datamoc/mw_games@0.
|
|
21
|
+
"version": "0.31.0",
|
|
22
|
+
"purl": "pkg:npm/%40datamoc/mw_games@0.31.0",
|
|
23
23
|
"description": "A local-file game framework: renderer-free game logic, drawn through PixiJS in 2D or Babylon.js in 3D, with mobile and desktop packaging.",
|
|
24
24
|
"licenses": [
|
|
25
25
|
{
|
|
@@ -4601,7 +4601,7 @@
|
|
|
4601
4601
|
]
|
|
4602
4602
|
},
|
|
4603
4603
|
{
|
|
4604
|
-
"ref": "pkg:npm/%40datamoc/mw_games@0.
|
|
4604
|
+
"ref": "pkg:npm/%40datamoc/mw_games@0.31.0",
|
|
4605
4605
|
"dependsOn": [
|
|
4606
4606
|
"pkg:npm/%40babylonjs/core@9.29.0",
|
|
4607
4607
|
"pkg:npm/%40babylonjs/loaders@9.29.0",
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export interface ServedDir {
|
|
2
2
|
url: string;
|
|
3
3
|
port: number;
|
|
4
|
+
/**
|
|
5
|
+
* Presses and releases one key through the engine's trusted input channel (P41): a
|
|
6
|
+
* named key from the table (`Enter`, `Escape`, `ArrowUp`, ...), or a single character
|
|
7
|
+
* that types itself. `holdMs` parks between the down and the up.
|
|
8
|
+
*/
|
|
9
|
+
press(key: string, holdMs?: number): Promise<void>;
|
|
4
10
|
close(): Promise<void>;
|
|
5
11
|
}
|
|
6
12
|
|
|
@@ -42,6 +48,15 @@ export interface DriveOptions {
|
|
|
42
48
|
chromeArgs?: string[];
|
|
43
49
|
firefoxArgs?: string[];
|
|
44
50
|
profileDir?: string;
|
|
51
|
+
/**
|
|
52
|
+
* The inner page viewport, applied through each engine's protocol call (CDP
|
|
53
|
+
* `Emulation.setDeviceMetricsOverride`, BiDi `browsingContext.setViewport`) rather
|
|
54
|
+
* than window flags, whose outer size is what a consumer's compensation kept
|
|
55
|
+
* rediscovering (P41).
|
|
56
|
+
*/
|
|
57
|
+
viewport?: { width: number; height: number };
|
|
58
|
+
/** show the browser window instead of running headless, for watching a driven run */
|
|
59
|
+
headed?: boolean;
|
|
45
60
|
}
|
|
46
61
|
|
|
47
62
|
/** the readiness predicate browser-smoke's waitForGame waits on, as page JS */
|
|
@@ -65,6 +80,21 @@ export function buildTapSequence(x: number, y: number): CdpMouseEvent[];
|
|
|
65
80
|
/** the BiDi input.performActions pointer half of a tap, at CSS pixels */
|
|
66
81
|
export function buildPointerActions(x: number, y: number): BidiPointerAction[];
|
|
67
82
|
|
|
83
|
+
/** everything a named key's press needs per protocol: DOM `code`, Windows VK, the typed character, the WebDriver key value; null for the unmapped */
|
|
84
|
+
export function keyInfoOf(key: string): { code: string; vk: number; bidi: string; text?: string } | null;
|
|
85
|
+
|
|
86
|
+
/** the CDP `Input.dispatchKeyEvent` pair one press is */
|
|
87
|
+
export function cdpKeySequence(key: string): unknown[] | null;
|
|
88
|
+
|
|
89
|
+
/** the BiDi `input.performActions` key sequence one press is, with the hold as a pause */
|
|
90
|
+
export function bidiKeyActions(key: string, holdMs?: number): unknown[] | null;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The in-page synthetic pointer sequence a tap is, as page JS - the Firefox tap path,
|
|
94
|
+
* because the BiDi pointer actions do not reach Pixi 8's canvas EventSystem (P41).
|
|
95
|
+
*/
|
|
96
|
+
export function pageTapSource(x: number, y: number): string;
|
|
97
|
+
|
|
68
98
|
/** unwraps a WebDriver BiDi remote value into plain JSON */
|
|
69
99
|
export function unwrapRemoteValue(node: unknown): unknown;
|
|
70
100
|
|
package/tools/browser-driver.mjs
CHANGED
|
@@ -146,6 +146,112 @@ export function buildTapSequence(x, y) {
|
|
|
146
146
|
];
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
/**
|
|
150
|
+
* The named keys a game binds, with everything each input protocol needs: the
|
|
151
|
+
* DOM `code`, the Windows virtual-key code CDP wants, the character the key types
|
|
152
|
+
* (so `press('a')` reaches `onText`), and the WebDriver key value BiDi's key actions
|
|
153
|
+
* speak (the raw DOM key for printables, the `\uE0xx` control codes for the rest).
|
|
154
|
+
* Pure data so the suite can pin every mapping without a browser.
|
|
155
|
+
*/
|
|
156
|
+
const NAMED_KEYS = {
|
|
157
|
+
Enter: { code: 'Enter', vk: 13, bidi: '\uE007' },
|
|
158
|
+
Escape: { code: 'Escape', vk: 27, bidi: '\uE00B' },
|
|
159
|
+
Tab: { code: 'Tab', vk: 9, bidi: '\uE004' },
|
|
160
|
+
Backspace: { code: 'Backspace', vk: 8, bidi: '\uE003' },
|
|
161
|
+
Delete: { code: 'Delete', vk: 46, bidi: '\uE017' },
|
|
162
|
+
ArrowUp: { code: 'ArrowUp', vk: 38, bidi: '\uE013' },
|
|
163
|
+
ArrowDown: { code: 'ArrowDown', vk: 40, bidi: '\uE015' },
|
|
164
|
+
ArrowLeft: { code: 'ArrowLeft', vk: 37, bidi: '\uE012' },
|
|
165
|
+
ArrowRight: { code: 'ArrowRight', vk: 39, bidi: '\uE014' },
|
|
166
|
+
Space: { code: 'Space', vk: 32, bidi: ' ', text: ' ' },
|
|
167
|
+
Shift: { code: 'ShiftLeft', vk: 16, bidi: '\uE008' },
|
|
168
|
+
F5: { code: 'F5', vk: 116, bidi: '\uE035' },
|
|
169
|
+
F9: { code: 'F9', vk: 120, bidi: '\uE039' },
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Everything `press(key)` needs for one key: a printable character reads its own
|
|
174
|
+
* code off its spelling (`a` -> `KeyA`, `5` -> `Digit5`), a named key comes from the
|
|
175
|
+
* table, and anything else has no mapping (the caller hears `null`, not a guess).
|
|
176
|
+
*/
|
|
177
|
+
export function keyInfoOf(key) {
|
|
178
|
+
if (NAMED_KEYS[key]) return NAMED_KEYS[key];
|
|
179
|
+
if (key.length === 1) {
|
|
180
|
+
const lower = key.toLowerCase();
|
|
181
|
+
const code =
|
|
182
|
+
lower >= 'a' && lower <= 'z'
|
|
183
|
+
? `Key${key.toUpperCase()}`
|
|
184
|
+
: lower >= '0' && lower <= '9'
|
|
185
|
+
? `Digit${key}`
|
|
186
|
+
: null;
|
|
187
|
+
if (!code) return null;
|
|
188
|
+
return { code, vk: key.toUpperCase().charCodeAt(0), bidi: key, text: key };
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* The CDP `Input.dispatchKeyEvent` pair a press is: `keyDown` carries the character a
|
|
195
|
+
* text-producing key types, then `keyUp`. Pure so the suite pins the shape.
|
|
196
|
+
*/
|
|
197
|
+
export function cdpKeySequence(key) {
|
|
198
|
+
const info = keyInfoOf(key);
|
|
199
|
+
if (!info) return null;
|
|
200
|
+
return [
|
|
201
|
+
{
|
|
202
|
+
type: 'keyDown',
|
|
203
|
+
key,
|
|
204
|
+
code: info.code,
|
|
205
|
+
windowsVirtualKeyCode: info.vk,
|
|
206
|
+
...(info.text ? { text: info.text } : {}),
|
|
207
|
+
},
|
|
208
|
+
{ type: 'keyUp', key, code: info.code, windowsVirtualKeyCode: info.vk },
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* The BiDi `input.performActions` key sequence a press is: `keyDown`, a pause of
|
|
214
|
+
* the hold, `keyUp`, speaking the WebDriver key values. Pure for the same reason.
|
|
215
|
+
*/
|
|
216
|
+
export function bidiKeyActions(key, holdMs = 60) {
|
|
217
|
+
const info = keyInfoOf(key);
|
|
218
|
+
if (!info) return null;
|
|
219
|
+
return [
|
|
220
|
+
{
|
|
221
|
+
type: 'key',
|
|
222
|
+
id: 'mwg-keyboard',
|
|
223
|
+
actions: [
|
|
224
|
+
{ type: 'keyDown', value: info.bidi },
|
|
225
|
+
{ type: 'pause', duration: holdMs },
|
|
226
|
+
{ type: 'keyUp', value: info.bidi },
|
|
227
|
+
],
|
|
228
|
+
},
|
|
229
|
+
];
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* The in-page pointer sequence a tap is, as page JS: a full synthetic
|
|
234
|
+
* move/press/release (plus the click it composes to) at CSS pixels with the
|
|
235
|
+
* pointer identity a real mouse carries. This is the Firefox tap path, because
|
|
236
|
+
* the WebDriver BiDi `input.performActions` pointer half does not reach Pixi 8's
|
|
237
|
+
* canvas EventSystem (measured by the pixel-dungeon port: a title-screen button
|
|
238
|
+
* does not advance; the identical in-page dispatch does), and every Pixi consumer
|
|
239
|
+
* on Firefox would otherwise rediscover that. `buildPointerActions` stays exported
|
|
240
|
+
* for a consumer that wants the trusted sequence anyway.
|
|
241
|
+
*/
|
|
242
|
+
export function pageTapSource(x, y) {
|
|
243
|
+
return `(() => {
|
|
244
|
+
const canvas = document.querySelector("canvas");
|
|
245
|
+
const rect = canvas.getBoundingClientRect();
|
|
246
|
+
const base = { bubbles: true, cancelable: true, composed: true, pointerId: 1, pointerType: "mouse", isPrimary: true, button: 0, clientX: ${x}, clientY: ${y} };
|
|
247
|
+
canvas.dispatchEvent(new PointerEvent("pointermove", { ...base, buttons: 0 }));
|
|
248
|
+
canvas.dispatchEvent(new PointerEvent("pointerdown", { ...base, buttons: 1 }));
|
|
249
|
+
canvas.dispatchEvent(new PointerEvent("pointerup", { ...base, buttons: 0 }));
|
|
250
|
+
canvas.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true, composed: true, button: 0, buttons: 0, clientX: ${x}, clientY: ${y} }));
|
|
251
|
+
return { x: rect.x, y: rect.y, w: rect.width, h: rect.height };
|
|
252
|
+
})()`;
|
|
253
|
+
}
|
|
254
|
+
|
|
149
255
|
/**
|
|
150
256
|
* Unwraps a WebDriver BiDi remote value into plain JSON: primitives read off
|
|
151
257
|
* `.value`, arrays unwrap element-wise, objects/maps unwrap their key/value pairs,
|
|
@@ -417,7 +523,7 @@ export async function driveChrome(options = {}) {
|
|
|
417
523
|
const child = spawn(
|
|
418
524
|
executable,
|
|
419
525
|
[
|
|
420
|
-
'--headless',
|
|
526
|
+
...(options.headed ? [] : ['--headless']),
|
|
421
527
|
'--no-first-run',
|
|
422
528
|
'--no-default-browser-check',
|
|
423
529
|
'--disable-extensions',
|
|
@@ -451,6 +557,18 @@ export async function driveChrome(options = {}) {
|
|
|
451
557
|
await cdp.send('Runtime.enable');
|
|
452
558
|
await cdp.send('Log.enable');
|
|
453
559
|
|
|
560
|
+
//P41: the inner viewport, applied through the protocol rather than window flags -
|
|
561
|
+
//`--window-size` is the OUTER size (22x98 of window chrome on this build), so every
|
|
562
|
+
//consumer that compensated the flags was drift-fragile across browser updates.
|
|
563
|
+
if (options.viewport) {
|
|
564
|
+
await cdp.send('Emulation.setDeviceMetricsOverride', {
|
|
565
|
+
width: options.viewport.width,
|
|
566
|
+
height: options.viewport.height,
|
|
567
|
+
deviceScaleFactor: 1,
|
|
568
|
+
mobile: false,
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
|
|
454
572
|
let closed = false;
|
|
455
573
|
const evaluate = async (expression, awaitPromise = false) => {
|
|
456
574
|
const { result } = await cdp.send('Runtime.evaluate', {
|
|
@@ -480,6 +598,13 @@ export async function driveChrome(options = {}) {
|
|
|
480
598
|
await cdp.send('Input.dispatchMouseEvent', event);
|
|
481
599
|
}
|
|
482
600
|
},
|
|
601
|
+
/** presses and releases one key through Chrome's trusted input channel (P41) */
|
|
602
|
+
press: async (key, holdMs = 60) => {
|
|
603
|
+
const sequence = cdpKeySequence(key);
|
|
604
|
+
if (!sequence) throw new Error(`no key mapping for '${key}'`);
|
|
605
|
+
for (const event of sequence) await cdp.send('Input.dispatchKeyEvent', event);
|
|
606
|
+
await new Promise((tick) => setTimeout(tick, holdMs));
|
|
607
|
+
},
|
|
483
608
|
screenshot: async () => {
|
|
484
609
|
const { data } = await cdp.send('Page.captureScreenshot', { format: 'png', fromSurface: true });
|
|
485
610
|
return Buffer.from(data, 'base64');
|
|
@@ -542,7 +667,7 @@ export async function driveFirefox(options = {}) {
|
|
|
542
667
|
const child = spawn(
|
|
543
668
|
executable,
|
|
544
669
|
[
|
|
545
|
-
'--headless',
|
|
670
|
+
...(options.headed ? [] : ['--headless']),
|
|
546
671
|
'--no-remote',
|
|
547
672
|
'--profile',
|
|
548
673
|
profile,
|
|
@@ -590,6 +715,16 @@ export async function driveFirefox(options = {}) {
|
|
|
590
715
|
await send('session.subscribe', { events: ['log.entryAdded'] }, sessionId);
|
|
591
716
|
const { context } = await send('browsingContext.create', { type: 'tab' }, sessionId);
|
|
592
717
|
|
|
718
|
+
//P41: the inner viewport, through the protocol (Firefox's --height flag lands 85
|
|
719
|
+
//short of the inner size, which is what the window-flag compensation measured).
|
|
720
|
+
if (options.viewport) {
|
|
721
|
+
await send(
|
|
722
|
+
'browsingContext.setViewport',
|
|
723
|
+
{ context, viewport: { width: options.viewport.width, height: options.viewport.height } },
|
|
724
|
+
sessionId,
|
|
725
|
+
);
|
|
726
|
+
}
|
|
727
|
+
|
|
593
728
|
const evaluate = async (expression, awaitPromise = false) => {
|
|
594
729
|
const outer = await send(
|
|
595
730
|
'script.evaluate',
|
|
@@ -616,7 +751,15 @@ export async function driveFirefox(options = {}) {
|
|
|
616
751
|
);
|
|
617
752
|
const x = Math.round(point.x + point.w * xFraction);
|
|
618
753
|
const y = Math.round(point.y + point.h * yFraction);
|
|
619
|
-
|
|
754
|
+
//P41: the in-page synthetic sequence (see pageTapSource) - the BiDi pointer
|
|
755
|
+
//actions never reach Pixi 8's EventSystem, and this is the measured-working path.
|
|
756
|
+
await evaluate(pageTapSource(x, y), true);
|
|
757
|
+
},
|
|
758
|
+
/** presses and releases one key through WebDriver's key actions (P41) */
|
|
759
|
+
press: async (key, holdMs = 60) => {
|
|
760
|
+
const actions = bidiKeyActions(key, holdMs);
|
|
761
|
+
if (!actions) throw new Error(`no key mapping for '${key}'`);
|
|
762
|
+
await send('input.performActions', { context, actions }, sessionId);
|
|
620
763
|
},
|
|
621
764
|
screenshot: async () => {
|
|
622
765
|
const { data } = await send('browsingContext.captureScreenshot', { context }, sessionId);
|