@datamoc/mw_games 0.42.0 → 0.43.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 +59 -0
- package/README.md +62 -1
- package/REFERENCE.md +57 -5
- package/api-surface.json +672 -0
- package/data/microgm-essential.PROVENANCE.md +13 -0
- package/data/microgm-essential.sf2 +0 -0
- package/data/soundfont-catalog.json +8 -0
- package/dist/audio/AudioLoader.d.ts +28 -0
- package/dist/audio/AudioLoader.d.ts.map +1 -0
- package/dist/audio/AudioLoader.js +53 -0
- package/dist/audio/AudioLoader.js.map +1 -0
- package/dist/audio/Channels.d.ts +1 -0
- package/dist/audio/Channels.d.ts.map +1 -1
- package/dist/audio/Channels.js +2 -1
- package/dist/audio/Channels.js.map +1 -1
- package/dist/audio/MidiRender.d.ts +16 -0
- package/dist/audio/MidiRender.d.ts.map +1 -1
- package/dist/audio/MidiRender.js +21 -0
- package/dist/audio/MidiRender.js.map +1 -1
- package/dist/audio/MusicPlayer.d.ts +80 -0
- package/dist/audio/MusicPlayer.d.ts.map +1 -0
- package/dist/audio/MusicPlayer.js +147 -0
- package/dist/audio/MusicPlayer.js.map +1 -0
- package/dist/audio/SampleDecoder.d.ts +16 -2
- package/dist/audio/SampleDecoder.d.ts.map +1 -1
- package/dist/audio/SampleDecoder.js +10 -6
- package/dist/audio/SampleDecoder.js.map +1 -1
- package/dist/audio/Sound.d.ts +2 -0
- package/dist/audio/Sound.d.ts.map +1 -1
- package/dist/audio/Sound.js +3 -0
- package/dist/audio/Sound.js.map +1 -1
- package/dist/audio/SoundFont.d.ts +5 -3
- package/dist/audio/SoundFont.d.ts.map +1 -1
- package/dist/audio/SoundFont.js +10 -8
- package/dist/audio/SoundFont.js.map +1 -1
- package/dist/audio/Synth.d.ts +1 -1
- package/dist/audio/Synth.d.ts.map +1 -1
- package/dist/audio/Synth.js +4 -0
- package/dist/audio/Synth.js.map +1 -1
- package/dist/audio/index.d.ts +6 -2
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +3 -1
- package/dist/audio/index.js.map +1 -1
- package/dist/mw_games.global.js +22 -22
- package/dist/mwl/index.d.ts +2 -0
- package/dist/mwl/index.d.ts.map +1 -1
- package/dist/mwl/index.js +1 -0
- package/dist/mwl/index.js.map +1 -1
- package/dist/mwl/objects.d.ts +31 -0
- package/dist/mwl/objects.d.ts.map +1 -0
- package/dist/mwl/objects.js +83 -0
- package/dist/mwl/objects.js.map +1 -0
- package/dist/mwl/schema.d.ts +1 -1
- package/dist/mwl/schema.d.ts.map +1 -1
- package/dist/mwl/tables.d.ts +2 -0
- package/dist/mwl/tables.d.ts.map +1 -1
- package/dist/mwl/tables.js +13 -0
- package/dist/mwl/tables.js.map +1 -1
- package/dist/physics/XpbdWorld.d.ts +23 -5
- package/dist/physics/XpbdWorld.d.ts.map +1 -1
- package/dist/physics/XpbdWorld.js +90 -6
- package/dist/physics/XpbdWorld.js.map +1 -1
- package/dist/testing/index.d.ts +16 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +21 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/three-d/Collision3D.d.ts +46 -2
- package/dist/three-d/Collision3D.d.ts.map +1 -1
- package/dist/three-d/Collision3D.js +46 -2
- package/dist/three-d/Collision3D.js.map +1 -1
- package/dist/three-d/Grid.d.ts +12 -1
- package/dist/three-d/Grid.d.ts.map +1 -1
- package/dist/three-d/Grid.js +12 -1
- package/dist/three-d/Grid.js.map +1 -1
- package/dist/three-d/Vox.d.ts +13 -1
- package/dist/three-d/Vox.d.ts.map +1 -1
- package/dist/three-d/Vox.js +13 -1
- package/dist/three-d/Vox.js.map +1 -1
- package/dist/two-d/Game.d.ts +21 -1
- package/dist/two-d/Game.d.ts.map +1 -1
- package/dist/two-d/Game.js +73 -6
- package/dist/two-d/Game.js.map +1 -1
- package/dist/two-d/Scene2D.d.ts +24 -0
- package/dist/two-d/Scene2D.d.ts.map +1 -1
- package/dist/two-d/Scene2D.js +30 -0
- package/dist/two-d/Scene2D.js.map +1 -1
- package/dist/two-d/render/SceneTransition.d.ts +272 -0
- package/dist/two-d/render/SceneTransition.d.ts.map +1 -0
- package/dist/two-d/render/SceneTransition.js +431 -0
- package/dist/two-d/render/SceneTransition.js.map +1 -0
- package/dist/two-d/render/index.d.ts +2 -0
- 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/Button.d.ts +23 -0
- package/dist/two-d/ui/Button.d.ts.map +1 -1
- package/dist/two-d/ui/Button.js +37 -0
- package/dist/two-d/ui/Button.js.map +1 -1
- package/dist/two-d/ui/DropdownView.d.ts +49 -3
- package/dist/two-d/ui/DropdownView.d.ts.map +1 -1
- package/dist/two-d/ui/DropdownView.js +150 -9
- package/dist/two-d/ui/DropdownView.js.map +1 -1
- package/dist/two-d/ui/ScrollBox.d.ts +90 -0
- package/dist/two-d/ui/ScrollBox.d.ts.map +1 -1
- package/dist/two-d/ui/ScrollBox.js +206 -4
- package/dist/two-d/ui/ScrollBox.js.map +1 -1
- package/dist/two-d/ui/ScrollText.d.ts +122 -0
- package/dist/two-d/ui/ScrollText.d.ts.map +1 -0
- package/dist/two-d/ui/ScrollText.js +202 -0
- package/dist/two-d/ui/ScrollText.js.map +1 -0
- package/dist/two-d/ui/Tooltip.d.ts +70 -1
- package/dist/two-d/ui/Tooltip.d.ts.map +1 -1
- package/dist/two-d/ui/Tooltip.js +115 -3
- package/dist/two-d/ui/Tooltip.js.map +1 -1
- package/dist/two-d/ui/Window.d.ts +35 -2
- package/dist/two-d/ui/Window.d.ts.map +1 -1
- package/dist/two-d/ui/Window.js +58 -3
- package/dist/two-d/ui/Window.js.map +1 -1
- package/dist/two-d/ui/index.d.ts +7 -5
- package/dist/two-d/ui/index.d.ts.map +1 -1
- package/dist/two-d/ui/index.js +3 -2
- 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 +7 -3
- package/sbom.cdx.json +19 -260
- package/tools/browser-driver.mjs +3 -3
- package/tools/browser-smoke.mjs +19 -2
- package/tools/build-tablebases.mjs +7 -3
- package/tools/compile-openings.mjs +7 -3
- package/tools/compile-resources.d.mts +2 -0
- package/tools/compile-resources.mjs +13 -1
- package/tools/emit-page.d.mts +6 -0
- package/tools/emit-page.mjs +43 -3
- package/tools/find-chrome.mjs +4 -2
- package/tools/init.mjs +11 -3
- package/tools/play-uci.mjs +9 -5
- package/tools/vite.mjs +9 -1
- package/tools.md +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/two-d/ui/Button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/two-d/ui/Button.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import { Container } from 'pixi.js';
|
|
2
2
|
import { Dropdown, type DropdownOptions } from './Dropdown.ts';
|
|
3
|
+
import { ScrollBox } from './ScrollBox.ts';
|
|
3
4
|
export interface DropdownViewOptions extends DropdownOptions {
|
|
5
|
+
/** the closed button's width, and the list's; the least width when `autoWidth` is on */
|
|
4
6
|
width: number;
|
|
5
7
|
/** the height of the closed button and of each row of the open list; 28 when omitted */
|
|
6
8
|
rowHeight?: number;
|
|
9
|
+
/** rows shown at once; a longer list scrolls inside the box. 8 when omitted */
|
|
10
|
+
maxVisibleRows?: number;
|
|
11
|
+
/** widens the view to fit the longest label instead of cutting it off at `width` */
|
|
12
|
+
autoWidth?: boolean;
|
|
7
13
|
}
|
|
8
14
|
/**
|
|
9
15
|
* The widget for a `Dropdown` model: a button showing the current choice that opens a column
|
|
10
|
-
* of buttons beneath it, the
|
|
16
|
+
* of buttons beneath it, the highlighted row marked with `Button.setSelected`. Picking a row
|
|
11
17
|
* selects it, closes the list and fires the model's `onChange`; clicking the closed button
|
|
12
18
|
* again closes it.
|
|
13
19
|
*
|
|
20
|
+
* The list sits on an opaque backdrop, shows at most `maxVisibleRows` rows and scrolls (wheel,
|
|
21
|
+
* touch drag, keys, scrollbar) beyond that, opening with the chosen row in view. `autoWidth`
|
|
22
|
+
* measures the labels so none is cut off. The keyboard goes through `handleKey` (arrows, Page,
|
|
23
|
+
* Home, End, Enter, Escape) and a click elsewhere through `handleOutsideClick`, which the owning
|
|
24
|
+
* scene forwards from its own input, since the view does not own the stage.
|
|
25
|
+
*
|
|
14
26
|
* The list is drawn in this container's own space below the button, so a game places the view
|
|
15
27
|
* where the closed button should sit and keeps it above its siblings when it is open.
|
|
16
28
|
*
|
|
@@ -20,21 +32,55 @@ export interface DropdownViewOptions extends DropdownOptions {
|
|
|
20
32
|
*
|
|
21
33
|
* const level = new DropdownView({
|
|
22
34
|
* width: 180,
|
|
23
|
-
*
|
|
35
|
+
* maxVisibleRows: 6,
|
|
36
|
+
* options: Array.from({ length: 30 }, (_, i) => ({ label: `Level ${i + 1}` })),
|
|
24
37
|
* });
|
|
25
38
|
* level.model.onChange.add(({ index }) => console.log('chose', index));
|
|
26
39
|
* level.model.open();
|
|
27
40
|
* level.refresh();
|
|
41
|
+
* level.handleKey('PageDown'); // the highlight moves a page, the list scrolls to it
|
|
28
42
|
* ```
|
|
29
43
|
*/
|
|
30
44
|
export declare class DropdownView extends Container {
|
|
31
45
|
readonly model: Dropdown;
|
|
32
|
-
private
|
|
46
|
+
private width_;
|
|
33
47
|
private readonly rowHeight;
|
|
48
|
+
private readonly maxRows;
|
|
34
49
|
private readonly head;
|
|
35
50
|
private readonly list;
|
|
51
|
+
private readonly backdrop;
|
|
52
|
+
private box;
|
|
53
|
+
private listHeight;
|
|
54
|
+
private readonly themeListener;
|
|
36
55
|
constructor(options: DropdownViewOptions);
|
|
56
|
+
/** how wide `text` is as a row's caption, plus the button's own padding */
|
|
57
|
+
protected measureLabel(text: string): number;
|
|
58
|
+
private labelWidth;
|
|
59
|
+
/** the view's current width: `width`, or what the longest label needed with `autoWidth` */
|
|
60
|
+
get viewWidth(): number;
|
|
61
|
+
/** how many rows the open list shows at once (fewer than `maxVisibleRows` for a short list) */
|
|
62
|
+
get visibleRows(): number;
|
|
63
|
+
/** the open list's scrolling box, or null while closed; its `offset` is what a test reads */
|
|
64
|
+
get scroller(): ScrollBox | null;
|
|
65
|
+
/** lets a list that would run off the bottom of a `height`-tall viewport show fewer rows */
|
|
66
|
+
fitBelow(globalY: number, viewportHeight: number): number;
|
|
37
67
|
/** redraws the closed label and the open list from the model; call after changing the model directly */
|
|
38
68
|
refresh(): void;
|
|
69
|
+
/**
|
|
70
|
+
* A key for the view: closed, Enter/Space/ArrowDown open it; open, the arrows, Page and Home/End
|
|
71
|
+
* move the highlight (the list scrolls to keep it in view), Enter picks it and Escape closes
|
|
72
|
+
* without changing the choice.
|
|
73
|
+
*
|
|
74
|
+
* @returns true when the key was used, so the caller does not also act on it
|
|
75
|
+
*/
|
|
76
|
+
handleKey(key: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* A press at a screen position: closes the open list, keeping the old choice, when it landed
|
|
79
|
+
* outside the button and the list.
|
|
80
|
+
*
|
|
81
|
+
* @returns true when it closed the list
|
|
82
|
+
*/
|
|
83
|
+
handleOutsideClick(globalX: number, globalY: number): boolean;
|
|
84
|
+
destroy(options?: Parameters<Container['destroy']>[0]): void;
|
|
39
85
|
}
|
|
40
86
|
//# sourceMappingURL=DropdownView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownView.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/DropdownView.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"DropdownView.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/DropdownView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,SAAS,EAA8B,MAAM,SAAS,CAAC;AAEnF,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC3D,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,YAAa,SAAQ,SAAS;IAC1C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IAEtD,YAAY,OAAO,EAAE,mBAAmB,EAuBvC;IAED,2EAA2E;IAC3E,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ3C;IAED,OAAO,CAAC,UAAU;IAIlB,2FAA2F;IAC3F,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,+FAA+F;IAC/F,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,6FAA6F;IAC7F,IAAI,QAAQ,IAAI,SAAS,GAAG,IAAI,CAE/B;IAED,4FAA4F;IAC5F,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAGxD;IAED,wGAAwG;IACxG,OAAO,IAAI,IAAI,CA6Cd;IAED;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAyC9B;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAS5D;IAEQ,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAGpE;CACD"}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
import { Container } from 'pixi.js';
|
|
1
|
+
import { CanvasTextMetrics, Container, Graphics, Point, TextStyle } from 'pixi.js';
|
|
2
2
|
import { Button } from './Button.js';
|
|
3
3
|
import { Dropdown } from './Dropdown.js';
|
|
4
|
+
import { ScrollBox } from './ScrollBox.js';
|
|
5
|
+
import { theme, themeChanged } from './theme.js';
|
|
4
6
|
/**
|
|
5
7
|
* The widget for a `Dropdown` model: a button showing the current choice that opens a column
|
|
6
|
-
* of buttons beneath it, the
|
|
8
|
+
* of buttons beneath it, the highlighted row marked with `Button.setSelected`. Picking a row
|
|
7
9
|
* selects it, closes the list and fires the model's `onChange`; clicking the closed button
|
|
8
10
|
* again closes it.
|
|
9
11
|
*
|
|
12
|
+
* The list sits on an opaque backdrop, shows at most `maxVisibleRows` rows and scrolls (wheel,
|
|
13
|
+
* touch drag, keys, scrollbar) beyond that, opening with the chosen row in view. `autoWidth`
|
|
14
|
+
* measures the labels so none is cut off. The keyboard goes through `handleKey` (arrows, Page,
|
|
15
|
+
* Home, End, Enter, Escape) and a click elsewhere through `handleOutsideClick`, which the owning
|
|
16
|
+
* scene forwards from its own input, since the view does not own the stage.
|
|
17
|
+
*
|
|
10
18
|
* The list is drawn in this container's own space below the button, so a game places the view
|
|
11
19
|
* where the closed button should sit and keeps it above its siblings when it is open.
|
|
12
20
|
*
|
|
@@ -16,20 +24,29 @@ import { Dropdown } from './Dropdown.js';
|
|
|
16
24
|
*
|
|
17
25
|
* const level = new DropdownView({
|
|
18
26
|
* width: 180,
|
|
19
|
-
*
|
|
27
|
+
* maxVisibleRows: 6,
|
|
28
|
+
* options: Array.from({ length: 30 }, (_, i) => ({ label: `Level ${i + 1}` })),
|
|
20
29
|
* });
|
|
21
30
|
* level.model.onChange.add(({ index }) => console.log('chose', index));
|
|
22
31
|
* level.model.open();
|
|
23
32
|
* level.refresh();
|
|
33
|
+
* level.handleKey('PageDown'); // the highlight moves a page, the list scrolls to it
|
|
24
34
|
* ```
|
|
25
35
|
*/
|
|
26
36
|
export class DropdownView extends Container {
|
|
27
37
|
constructor(options) {
|
|
28
38
|
super();
|
|
29
39
|
this.list = new Container();
|
|
40
|
+
this.backdrop = new Graphics();
|
|
41
|
+
this.box = null;
|
|
42
|
+
this.listHeight = 0;
|
|
43
|
+
this.themeListener = () => this.refresh();
|
|
30
44
|
this.model = new Dropdown(options);
|
|
31
|
-
this.width_ = options.width;
|
|
32
45
|
this.rowHeight = options.rowHeight ?? 28;
|
|
46
|
+
this.maxRows = Math.max(1, options.maxVisibleRows ?? 8);
|
|
47
|
+
this.width_ = options.autoWidth
|
|
48
|
+
? Math.max(options.width, ...this.model.options.map((option) => this.labelWidth(option.label)))
|
|
49
|
+
: options.width;
|
|
33
50
|
this.head = new Button({
|
|
34
51
|
width: this.width_,
|
|
35
52
|
height: this.rowHeight,
|
|
@@ -41,22 +58,71 @@ export class DropdownView extends Container {
|
|
|
41
58
|
},
|
|
42
59
|
});
|
|
43
60
|
this.list.y = this.rowHeight;
|
|
61
|
+
this.list.addChild(this.backdrop);
|
|
44
62
|
this.addChild(this.head, this.list);
|
|
45
63
|
this.refresh();
|
|
64
|
+
themeChanged.add(this.themeListener);
|
|
65
|
+
}
|
|
66
|
+
/** how wide `text` is as a row's caption, plus the button's own padding */
|
|
67
|
+
measureLabel(text) {
|
|
68
|
+
try {
|
|
69
|
+
const style = new TextStyle({ fontFamily: theme().font.family, fontSize: theme().font.size });
|
|
70
|
+
return CanvasTextMetrics.measureText(text, style).width;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
//no canvas to measure with (a test, a server): an average glyph width instead
|
|
74
|
+
return text.length * theme().font.size * 0.6;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
labelWidth(text) {
|
|
78
|
+
return Math.ceil(this.measureLabel(text)) + 2 * theme().padding + 16;
|
|
79
|
+
}
|
|
80
|
+
/** the view's current width: `width`, or what the longest label needed with `autoWidth` */
|
|
81
|
+
get viewWidth() {
|
|
82
|
+
return this.width_;
|
|
83
|
+
}
|
|
84
|
+
/** how many rows the open list shows at once (fewer than `maxVisibleRows` for a short list) */
|
|
85
|
+
get visibleRows() {
|
|
86
|
+
return Math.min(this.maxRows, this.model.options.length);
|
|
87
|
+
}
|
|
88
|
+
/** the open list's scrolling box, or null while closed; its `offset` is what a test reads */
|
|
89
|
+
get scroller() {
|
|
90
|
+
return this.box;
|
|
91
|
+
}
|
|
92
|
+
/** lets a list that would run off the bottom of a `height`-tall viewport show fewer rows */
|
|
93
|
+
fitBelow(globalY, viewportHeight) {
|
|
94
|
+
const rows = Math.floor((viewportHeight - globalY - this.rowHeight) / this.rowHeight);
|
|
95
|
+
return Math.max(1, Math.min(this.maxRows, rows));
|
|
46
96
|
}
|
|
47
97
|
/** redraws the closed label and the open list from the model; call after changing the model directly */
|
|
48
98
|
refresh() {
|
|
49
99
|
const model = this.model;
|
|
50
100
|
this.head.setText(`${model.selected?.label ?? ''} ▾`);
|
|
51
101
|
this.head.setDisabled(model.disabled);
|
|
52
|
-
|
|
53
|
-
|
|
102
|
+
this.box?.destroy({ children: true });
|
|
103
|
+
this.box = null;
|
|
54
104
|
this.list.visible = model.isOpen;
|
|
105
|
+
this.backdrop.clear();
|
|
55
106
|
if (!model.isOpen)
|
|
56
107
|
return;
|
|
108
|
+
const rows = this.visibleRows;
|
|
109
|
+
this.listHeight = rows * this.rowHeight;
|
|
110
|
+
const t = theme();
|
|
111
|
+
this.backdrop
|
|
112
|
+
.rect(0, 0, this.width_, this.listHeight)
|
|
113
|
+
.fill({ color: t.color.panelFill, alpha: 1 })
|
|
114
|
+
.stroke({ color: t.color.panelBorder, width: 1 });
|
|
115
|
+
const box = new ScrollBox({
|
|
116
|
+
width: this.width_,
|
|
117
|
+
height: this.listHeight,
|
|
118
|
+
contentHeight: model.options.length * this.rowHeight,
|
|
119
|
+
touch: true,
|
|
120
|
+
lineHeight: this.rowHeight,
|
|
121
|
+
});
|
|
122
|
+
const rowWidth = this.width_ - (box.scrollable ? 8 : 0);
|
|
57
123
|
model.options.forEach((option, index) => {
|
|
58
124
|
const row = new Button({
|
|
59
|
-
width:
|
|
125
|
+
width: rowWidth,
|
|
60
126
|
height: this.rowHeight,
|
|
61
127
|
text: option.label,
|
|
62
128
|
disabled: option.disabled,
|
|
@@ -67,9 +133,84 @@ export class DropdownView extends Container {
|
|
|
67
133
|
},
|
|
68
134
|
});
|
|
69
135
|
row.y = index * this.rowHeight;
|
|
70
|
-
row.setSelected(index === model.
|
|
71
|
-
|
|
136
|
+
row.setSelected(index === model.highlight);
|
|
137
|
+
box.content.addChild(row);
|
|
72
138
|
});
|
|
139
|
+
box.scrollIntoView(model.highlight * this.rowHeight, this.rowHeight);
|
|
140
|
+
this.box = box;
|
|
141
|
+
this.list.addChild(box);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* A key for the view: closed, Enter/Space/ArrowDown open it; open, the arrows, Page and Home/End
|
|
145
|
+
* move the highlight (the list scrolls to keep it in view), Enter picks it and Escape closes
|
|
146
|
+
* without changing the choice.
|
|
147
|
+
*
|
|
148
|
+
* @returns true when the key was used, so the caller does not also act on it
|
|
149
|
+
*/
|
|
150
|
+
handleKey(key) {
|
|
151
|
+
const model = this.model;
|
|
152
|
+
if (model.disabled)
|
|
153
|
+
return false;
|
|
154
|
+
if (!model.isOpen) {
|
|
155
|
+
if (key !== 'Enter' && key !== ' ' && key !== 'ArrowDown')
|
|
156
|
+
return false;
|
|
157
|
+
model.open();
|
|
158
|
+
this.refresh();
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
const count = model.options.length;
|
|
162
|
+
switch (key) {
|
|
163
|
+
case 'Escape':
|
|
164
|
+
model.cancel();
|
|
165
|
+
break;
|
|
166
|
+
case 'Enter':
|
|
167
|
+
case ' ':
|
|
168
|
+
model.confirm();
|
|
169
|
+
break;
|
|
170
|
+
case 'ArrowUp':
|
|
171
|
+
model.move(-1);
|
|
172
|
+
break;
|
|
173
|
+
case 'ArrowDown':
|
|
174
|
+
model.move(1);
|
|
175
|
+
break;
|
|
176
|
+
case 'PageUp':
|
|
177
|
+
model.setHighlight(Math.max(0, model.highlight - this.maxRows));
|
|
178
|
+
break;
|
|
179
|
+
case 'PageDown':
|
|
180
|
+
model.setHighlight(Math.min(count - 1, model.highlight + this.maxRows));
|
|
181
|
+
break;
|
|
182
|
+
case 'Home':
|
|
183
|
+
model.setHighlight(0);
|
|
184
|
+
break;
|
|
185
|
+
case 'End':
|
|
186
|
+
model.setHighlight(count - 1);
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
this.refresh();
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* A press at a screen position: closes the open list, keeping the old choice, when it landed
|
|
196
|
+
* outside the button and the list.
|
|
197
|
+
*
|
|
198
|
+
* @returns true when it closed the list
|
|
199
|
+
*/
|
|
200
|
+
handleOutsideClick(globalX, globalY) {
|
|
201
|
+
if (!this.model.isOpen)
|
|
202
|
+
return false;
|
|
203
|
+
const local = this.toLocal(new Point(globalX, globalY));
|
|
204
|
+
const inside = local.x >= 0 && local.x <= this.width_ && local.y >= 0 && local.y <= this.rowHeight + this.listHeight;
|
|
205
|
+
if (inside)
|
|
206
|
+
return false;
|
|
207
|
+
this.model.cancel();
|
|
208
|
+
this.refresh();
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
destroy(options) {
|
|
212
|
+
themeChanged.remove(this.themeListener);
|
|
213
|
+
super.destroy(options);
|
|
73
214
|
}
|
|
74
215
|
}
|
|
75
216
|
//# sourceMappingURL=DropdownView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownView.js","sourceRoot":"","sources":["../../../src/two-d/ui/DropdownView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"DropdownView.js","sourceRoot":"","sources":["../../../src/two-d/ui/DropdownView.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,18 +13,74 @@ import { Signal } from '../../core/Signal.ts';
|
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
export declare function scrollOffset(offset: number, contentSize: number, viewportSize: number): number;
|
|
16
|
+
/**
|
|
17
|
+
* Touch scrolling as plain numbers: feed it pointer positions and it says how far the content moves
|
|
18
|
+
* while the finger is down, then keeps coasting after release with a friction that decays the speed.
|
|
19
|
+
* No pointer events or clock of its own, so it is the same under a test as under a finger.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { ScrollDrag } from '@datamoc/mw_games/two-d/ui';
|
|
24
|
+
*
|
|
25
|
+
* const drag = new ScrollDrag();
|
|
26
|
+
* drag.start(200, 0);
|
|
27
|
+
* console.log(drag.move(170, 0.1)); // 30: the content follows the finger up
|
|
28
|
+
* drag.end();
|
|
29
|
+
* console.log(drag.step(1 / 60) > 0); // true: it keeps coasting
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class ScrollDrag {
|
|
33
|
+
/** content pixels per second the content keeps moving at after release; 0 when at rest */
|
|
34
|
+
velocity: number;
|
|
35
|
+
dragging: boolean;
|
|
36
|
+
/** how far the pointer has travelled since `start`, to tell a drag from a tap */
|
|
37
|
+
travelled: number;
|
|
38
|
+
private lastY;
|
|
39
|
+
private lastTime;
|
|
40
|
+
private readonly friction;
|
|
41
|
+
private readonly minSpeed;
|
|
42
|
+
/**
|
|
43
|
+
* @param friction fraction of the speed lost per second of coasting; 0.92 when omitted
|
|
44
|
+
* @param minSpeed the speed, in pixels per second, below which it counts as at rest; 8 when omitted
|
|
45
|
+
*/
|
|
46
|
+
constructor(friction?: number, minSpeed?: number);
|
|
47
|
+
start(y: number, time: number): void;
|
|
48
|
+
/** @returns how far the content should move for this pointer position */
|
|
49
|
+
move(y: number, time: number): number;
|
|
50
|
+
end(): void;
|
|
51
|
+
/** @returns how far the content coasts in `dt` seconds, 0 once it has stopped */
|
|
52
|
+
step(dt: number): number;
|
|
53
|
+
/** stops coasting, for when the content hit an end */
|
|
54
|
+
stop(): void;
|
|
55
|
+
}
|
|
16
56
|
export interface ScrollBoxOptions {
|
|
17
57
|
width: number;
|
|
58
|
+
/** the viewport's height, or its largest height when `autoHeight` is on */
|
|
18
59
|
height: number;
|
|
19
60
|
/** how tall the content is; set it again with `setContentHeight` as the content changes */
|
|
20
61
|
contentHeight?: number;
|
|
21
62
|
offset?: number;
|
|
63
|
+
/** dragging the content scrolls it and it coasts on release (`update(dt)` drives the coasting) */
|
|
64
|
+
touch?: boolean;
|
|
65
|
+
/** `handleKey` scrolls by line, page and to the ends */
|
|
66
|
+
keyboard?: boolean;
|
|
67
|
+
/** a viewport as tall as the content, up to `height` */
|
|
68
|
+
autoHeight?: boolean;
|
|
69
|
+
/** how far an arrow key scrolls; 24 when omitted */
|
|
70
|
+
lineHeight?: number;
|
|
22
71
|
}
|
|
72
|
+
/** the key names `ScrollBox.handleKey` answers to, as `KeyboardEvent.key` spells them */
|
|
73
|
+
export type ScrollKey = 'ArrowUp' | 'ArrowDown' | 'PageUp' | 'PageDown' | 'Home' | 'End';
|
|
23
74
|
/**
|
|
24
75
|
* A clipped viewport with a scrollbar: put rows in `content` and they scroll inside the box,
|
|
25
76
|
* everything outside it hidden by a mask. The scrollbar is drawn from the theme; the wheel,
|
|
26
77
|
* `scrollBy` and `scrollIntoView` all run through `scrollOffset`, so they clamp the same way.
|
|
27
78
|
*
|
|
79
|
+
* `touch: true` lets a finger drag the content (a drag ends the tap on the rows under it) and coast
|
|
80
|
+
* on release, `keyboard: true` makes `handleKey` scroll by line, page and to the ends, the scrollbar's
|
|
81
|
+
* thumb can be dragged and its track clicked, and `autoHeight` sizes the viewport to the content up
|
|
82
|
+
* to `height`. Call `update(dt)` each frame for the coasting.
|
|
83
|
+
*
|
|
28
84
|
* @example
|
|
29
85
|
* ```ts
|
|
30
86
|
* import { ScrollBox } from '@datamoc/mw_games/two-d/ui';
|
|
@@ -42,14 +98,22 @@ export declare class ScrollBox extends Container {
|
|
|
42
98
|
private track;
|
|
43
99
|
private thumb;
|
|
44
100
|
private width_;
|
|
101
|
+
private maxHeight_;
|
|
45
102
|
private height_;
|
|
46
103
|
private contentHeight_;
|
|
47
104
|
private offset_;
|
|
105
|
+
private readonly auto;
|
|
106
|
+
private readonly lineHeight;
|
|
107
|
+
private readonly drag;
|
|
108
|
+
private dragMoved;
|
|
109
|
+
private thumbGrab;
|
|
48
110
|
private readonly themeListener;
|
|
49
111
|
constructor(options: ScrollBoxOptions);
|
|
50
112
|
get offset(): number;
|
|
51
113
|
get contentHeight(): number;
|
|
52
114
|
get viewportHeight(): number;
|
|
115
|
+
/** the viewport's height: the content's, capped at the maximum, when `autoHeight` is on */
|
|
116
|
+
private fit;
|
|
53
117
|
/** how far the content can scroll; 0 when it all fits */
|
|
54
118
|
get maxOffset(): number;
|
|
55
119
|
get scrollable(): boolean;
|
|
@@ -59,6 +123,32 @@ export declare class ScrollBox extends Container {
|
|
|
59
123
|
scrollTo(offset: number): void;
|
|
60
124
|
/** scrolls just enough to bring a `height`-tall item at `top` fully into view */
|
|
61
125
|
scrollIntoView(top: number, height: number): void;
|
|
126
|
+
/**
|
|
127
|
+
* Scrolls for a key a keyboard-driven list was handed (`KeyboardEvent.key`).
|
|
128
|
+
*
|
|
129
|
+
* @returns true when the key is one this box scrolls by, so a caller can stop it going further
|
|
130
|
+
*/
|
|
131
|
+
handleKey(key: string): boolean;
|
|
132
|
+
/** a finger or button went down at `y` (any one coordinate space, `time` in seconds) */
|
|
133
|
+
dragStart(y: number, time: number): void;
|
|
134
|
+
/** the pointer moved while down; the content follows once it has travelled a few pixels */
|
|
135
|
+
dragMove(y: number, time: number): void;
|
|
136
|
+
dragEnd(): void;
|
|
137
|
+
/** true once the pointer travelled far enough to count as a drag rather than a tap */
|
|
138
|
+
get dragged(): boolean;
|
|
139
|
+
/** advances touch coasting; call once a frame from the owning scene's `update` */
|
|
140
|
+
update(dt: number): void;
|
|
141
|
+
/** where the scrollbar's thumb sits and how tall it is, in the box's own space */
|
|
142
|
+
get thumbMetrics(): {
|
|
143
|
+
y: number;
|
|
144
|
+
height: number;
|
|
145
|
+
};
|
|
146
|
+
/** the thumb was grabbed at `y` */
|
|
147
|
+
thumbDragStart(y: number): void;
|
|
148
|
+
/** the thumb moved to `y`: the offset follows in proportion to the thumb's travel */
|
|
149
|
+
thumbDragMove(y: number): void;
|
|
150
|
+
/** a click on the track at local `y` puts the thumb's centre there */
|
|
151
|
+
scrollToThumbCentre(y: number): void;
|
|
62
152
|
private setOffset;
|
|
63
153
|
private readonly handleWheel;
|
|
64
154
|
private draw;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollBox.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/ScrollBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ScrollBox.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/ScrollBox.ts"],"names":[],"mappings":"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"}
|