@flighthq/gui 0.4.1-edge.28.7f8e221
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/LICENSE.md +9 -0
- package/README.md +17 -0
- package/dist/buttonController.d.ts +7 -0
- package/dist/buttonController.d.ts.map +1 -0
- package/dist/buttonController.js +83 -0
- package/dist/buttonController.js.map +1 -0
- package/dist/comboBoxController.d.ts +7 -0
- package/dist/comboBoxController.d.ts.map +1 -0
- package/dist/comboBoxController.js +46 -0
- package/dist/comboBoxController.js.map +1 -0
- package/dist/contract.d.ts +16 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +16 -0
- package/dist/contract.js.map +1 -0
- package/dist/guiController.d.ts +24 -0
- package/dist/guiController.d.ts.map +1 -0
- package/dist/guiController.js +101 -0
- package/dist/guiController.js.map +1 -0
- package/dist/guiTestHelper.d.ts +5 -0
- package/dist/guiTestHelper.d.ts.map +1 -0
- package/dist/guiTestHelper.js +57 -0
- package/dist/guiTestHelper.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/listController.d.ts +8 -0
- package/dist/listController.d.ts.map +1 -0
- package/dist/listController.js +82 -0
- package/dist/listController.js.map +1 -0
- package/dist/progressBarController.d.ts +6 -0
- package/dist/progressBarController.d.ts.map +1 -0
- package/dist/progressBarController.js +42 -0
- package/dist/progressBarController.js.map +1 -0
- package/dist/radioGroupController.d.ts +7 -0
- package/dist/radioGroupController.d.ts.map +1 -0
- package/dist/radioGroupController.js +50 -0
- package/dist/radioGroupController.js.map +1 -0
- package/dist/scrollBarController.d.ts +7 -0
- package/dist/scrollBarController.d.ts.map +1 -0
- package/dist/scrollBarController.js +124 -0
- package/dist/scrollBarController.js.map +1 -0
- package/dist/scrollViewController.d.ts +8 -0
- package/dist/scrollViewController.d.ts.map +1 -0
- package/dist/scrollViewController.js +99 -0
- package/dist/scrollViewController.js.map +1 -0
- package/dist/sliderController.d.ts +7 -0
- package/dist/sliderController.d.ts.map +1 -0
- package/dist/sliderController.js +105 -0
- package/dist/sliderController.js.map +1 -0
- package/dist/splitPaneController.d.ts +7 -0
- package/dist/splitPaneController.d.ts.map +1 -0
- package/dist/splitPaneController.js +87 -0
- package/dist/splitPaneController.js.map +1 -0
- package/dist/tabBarController.d.ts +7 -0
- package/dist/tabBarController.d.ts.map +1 -0
- package/dist/tabBarController.js +43 -0
- package/dist/tabBarController.js.map +1 -0
- package/dist/textInputController.d.ts +9 -0
- package/dist/textInputController.d.ts.map +1 -0
- package/dist/textInputController.js +132 -0
- package/dist/textInputController.js.map +1 -0
- package/dist/toggleController.d.ts +7 -0
- package/dist/toggleController.d.ts.map +1 -0
- package/dist/toggleController.js +57 -0
- package/dist/toggleController.js.map +1 -0
- package/dist/tooltipController.d.ts +6 -0
- package/dist/tooltipController.d.ts.map +1 -0
- package/dist/tooltipController.js +62 -0
- package/dist/tooltipController.js.map +1 -0
- package/dist/treeViewController.d.ts +10 -0
- package/dist/treeViewController.d.ts.map +1 -0
- package/dist/treeViewController.js +128 -0
- package/dist/treeViewController.js.map +1 -0
- package/dist/windowController.d.ts +7 -0
- package/dist/windowController.d.ts.map +1 -0
- package/dist/windowController.js +119 -0
- package/dist/windowController.js.map +1 -0
- package/package.json +53 -0
- package/src/buttonController.test.ts +90 -0
- package/src/comboBoxController.test.ts +71 -0
- package/src/guiController.test.ts +162 -0
- package/src/guiTreeShaking.test.ts +35 -0
- package/src/listController.test.ts +96 -0
- package/src/progressBarController.test.ts +49 -0
- package/src/radioGroupController.test.ts +61 -0
- package/src/scrollBarController.test.ts +86 -0
- package/src/scrollViewController.test.ts +80 -0
- package/src/sliderController.test.ts +74 -0
- package/src/splitPaneController.test.ts +85 -0
- package/src/tabBarController.test.ts +50 -0
- package/src/textInputController.test.ts +93 -0
- package/src/toggleController.test.ts +72 -0
- package/src/tooltipController.test.ts +56 -0
- package/src/treeViewController.test.ts +105 -0
- package/src/windowController.test.ts +75 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2013-2026 Joshua Granick and other contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# @flighthq/gui
|
|
2
|
+
|
|
3
|
+
Controller-only behavior for caller-authored 2D interface visuals
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install @flighthq/gui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Import the supported application-facing API from `@flighthq/gui`. The `@flighthq/gui/contract` export is the wider package-to-package contract used to compose Flight itself.
|
|
12
|
+
|
|
13
|
+
This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
|
|
14
|
+
|
|
15
|
+
- [Flight project](https://github.com/flighthq/flight)
|
|
16
|
+
- [Source for @flighthq/gui@0.4.1-edge.28.7f8e221](https://github.com/flighthq/flight/tree/7f8e221c72f4afa55c07bf31862b2e3d60e1c81f/packages/gui)
|
|
17
|
+
- [License](https://github.com/flighthq/flight/blob/7f8e221c72f4afa55c07bf31862b2e3d60e1c81f/LICENSE.md)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ButtonController, ButtonControllerOptions, ButtonControllerSignals } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createButtonController(options: Readonly<ButtonControllerOptions>): ButtonController;
|
|
3
|
+
export declare function disposeButtonController(controller: ButtonController): void;
|
|
4
|
+
export declare function getButtonControllerSignals(controller: ButtonController): Readonly<ButtonControllerSignals>;
|
|
5
|
+
export declare function isButtonControllerDisabled(controller: ButtonController): boolean;
|
|
6
|
+
export declare function setButtonControllerDisabled(controller: ButtonController, disabled: boolean): void;
|
|
7
|
+
//# sourceMappingURL=buttonController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buttonController.d.ts","sourceRoot":"","sources":["../src/buttonController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EAExB,MAAM,0BAA0B,CAAC;AAsBlC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GAAG,gBAAgB,CAgDnG;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAO1E;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,gBAAgB,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAE1G;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAEhF;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAMjG"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { createSignal, emitSignal } from '@flighthq/signals/contract';
|
|
2
|
+
import { configureGuiHitArea, connectGuiInteraction, createGuiController, createGuiControllerRuntime, disposeGuiController, getGuiControllerRuntime, setGuiVisible, } from './guiController';
|
|
3
|
+
export function createButtonController(options) {
|
|
4
|
+
const runtime = createGuiControllerRuntime({
|
|
5
|
+
disabled: options.disabled ?? false,
|
|
6
|
+
downState: options.downState ?? null,
|
|
7
|
+
over: false,
|
|
8
|
+
overState: options.overState ?? null,
|
|
9
|
+
pressed: false,
|
|
10
|
+
signals: {
|
|
11
|
+
onClick: createSignal(),
|
|
12
|
+
onPress: createSignal(),
|
|
13
|
+
onRelease: createSignal(),
|
|
14
|
+
},
|
|
15
|
+
upState: options.upState,
|
|
16
|
+
}, options.transition);
|
|
17
|
+
const controller = createGuiController(runtime);
|
|
18
|
+
const target = options.upState;
|
|
19
|
+
if (options.hitArea !== undefined)
|
|
20
|
+
configureGuiHitArea(runtime, target, options.hitArea);
|
|
21
|
+
connectGuiInteraction(runtime, target, 'onPointerOver', () => {
|
|
22
|
+
runtime.over = true;
|
|
23
|
+
updateButtonControllerVisuals(runtime);
|
|
24
|
+
});
|
|
25
|
+
connectGuiInteraction(runtime, target, 'onPointerOut', () => {
|
|
26
|
+
runtime.over = false;
|
|
27
|
+
updateButtonControllerVisuals(runtime);
|
|
28
|
+
});
|
|
29
|
+
connectGuiInteraction(runtime, target, 'onPointerDown', () => {
|
|
30
|
+
if (runtime.disabled)
|
|
31
|
+
return;
|
|
32
|
+
runtime.pressed = true;
|
|
33
|
+
updateButtonControllerVisuals(runtime);
|
|
34
|
+
emitSignal(runtime.signals.onPress);
|
|
35
|
+
});
|
|
36
|
+
const release = () => {
|
|
37
|
+
if (!runtime.pressed)
|
|
38
|
+
return;
|
|
39
|
+
runtime.pressed = false;
|
|
40
|
+
updateButtonControllerVisuals(runtime);
|
|
41
|
+
emitSignal(runtime.signals.onRelease);
|
|
42
|
+
};
|
|
43
|
+
connectGuiInteraction(runtime, target, 'onPointerUp', release);
|
|
44
|
+
connectGuiInteraction(runtime, target, 'onPointerCancel', release);
|
|
45
|
+
connectGuiInteraction(runtime, target, 'onReleaseOutside', release);
|
|
46
|
+
connectGuiInteraction(runtime, target, 'onClick', () => {
|
|
47
|
+
if (!runtime.disabled)
|
|
48
|
+
emitSignal(runtime.signals.onClick);
|
|
49
|
+
});
|
|
50
|
+
updateButtonControllerVisuals(runtime);
|
|
51
|
+
return controller;
|
|
52
|
+
}
|
|
53
|
+
export function disposeButtonController(controller) {
|
|
54
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
55
|
+
disposeGuiController(controller, () => {
|
|
56
|
+
runtime.downState = null;
|
|
57
|
+
runtime.overState = null;
|
|
58
|
+
runtime.upState = null;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export function getButtonControllerSignals(controller) {
|
|
62
|
+
return getGuiControllerRuntime(controller).signals;
|
|
63
|
+
}
|
|
64
|
+
export function isButtonControllerDisabled(controller) {
|
|
65
|
+
return getGuiControllerRuntime(controller).disabled;
|
|
66
|
+
}
|
|
67
|
+
export function setButtonControllerDisabled(controller, disabled) {
|
|
68
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
69
|
+
if (runtime.disabled === disabled)
|
|
70
|
+
return;
|
|
71
|
+
runtime.disabled = disabled;
|
|
72
|
+
if (disabled)
|
|
73
|
+
runtime.pressed = false;
|
|
74
|
+
updateButtonControllerVisuals(runtime);
|
|
75
|
+
}
|
|
76
|
+
function updateButtonControllerVisuals(runtime) {
|
|
77
|
+
const down = !runtime.disabled && runtime.pressed && runtime.downState !== null;
|
|
78
|
+
const over = !runtime.disabled && !down && runtime.over && runtime.overState !== null;
|
|
79
|
+
setGuiVisible(runtime, runtime.upState, !down && !over);
|
|
80
|
+
setGuiVisible(runtime, runtime.overState, over);
|
|
81
|
+
setGuiVisible(runtime, runtime.downState, down);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=buttonController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buttonController.js","sourceRoot":"","sources":["../src/buttonController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ComboBoxController, ComboBoxControllerOptions, ComboBoxControllerSignals } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createComboBoxController(options: Readonly<ComboBoxControllerOptions>): ComboBoxController;
|
|
3
|
+
export declare function disposeComboBoxController(controller: ComboBoxController): void;
|
|
4
|
+
export declare function getComboBoxControllerSignals(controller: ComboBoxController): Readonly<ComboBoxControllerSignals>;
|
|
5
|
+
export declare function isComboBoxControllerOpen(controller: ComboBoxController): boolean;
|
|
6
|
+
export declare function setComboBoxControllerOpen(controller: ComboBoxController, open: boolean): void;
|
|
7
|
+
//# sourceMappingURL=comboBoxController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comboBoxController.d.ts","sourceRoot":"","sources":["../src/comboBoxController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EAG1B,MAAM,0BAA0B,CAAC;AAoBlC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,kBAAkB,CAqBzG;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAO9E;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,kBAAkB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAEhH;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAEhF;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAM7F"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createSignal, emitSignal } from '@flighthq/signals/contract';
|
|
2
|
+
import { getButtonControllerSignals } from './buttonController';
|
|
3
|
+
import { connectGuiSignal, createGuiController, createGuiControllerRuntime, disposeGuiController, getGuiControllerRuntime, } from './guiController';
|
|
4
|
+
import { getListControllerSignals, setListControllerVisible } from './listController';
|
|
5
|
+
export function createComboBoxController(options) {
|
|
6
|
+
const runtime = createGuiControllerRuntime({
|
|
7
|
+
button: options.button,
|
|
8
|
+
display: options.display ?? null,
|
|
9
|
+
list: options.list,
|
|
10
|
+
open: options.open ?? false,
|
|
11
|
+
signals: { onChange: createSignal(), onOpenChange: createSignal() },
|
|
12
|
+
}, options.transition);
|
|
13
|
+
const controller = createGuiController(runtime);
|
|
14
|
+
connectGuiSignal(runtime, getButtonControllerSignals(options.button).onClick, () => {
|
|
15
|
+
setComboBoxControllerOpen(controller, !runtime.open);
|
|
16
|
+
});
|
|
17
|
+
connectGuiSignal(runtime, getListControllerSignals(options.list).onSelect, (index) => {
|
|
18
|
+
emitSignal(runtime.signals.onChange, index);
|
|
19
|
+
setComboBoxControllerOpen(controller, false);
|
|
20
|
+
});
|
|
21
|
+
setListControllerVisible(options.list, runtime.open);
|
|
22
|
+
return controller;
|
|
23
|
+
}
|
|
24
|
+
export function disposeComboBoxController(controller) {
|
|
25
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
26
|
+
disposeGuiController(controller, () => {
|
|
27
|
+
runtime.button = null;
|
|
28
|
+
runtime.display = null;
|
|
29
|
+
runtime.list = null;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export function getComboBoxControllerSignals(controller) {
|
|
33
|
+
return getGuiControllerRuntime(controller).signals;
|
|
34
|
+
}
|
|
35
|
+
export function isComboBoxControllerOpen(controller) {
|
|
36
|
+
return getGuiControllerRuntime(controller).open;
|
|
37
|
+
}
|
|
38
|
+
export function setComboBoxControllerOpen(controller, open) {
|
|
39
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
40
|
+
if (runtime.open === open || runtime.list === null || runtime.disposed)
|
|
41
|
+
return;
|
|
42
|
+
runtime.open = open;
|
|
43
|
+
setListControllerVisible(runtime.list, open);
|
|
44
|
+
emitSignal(runtime.signals.onOpenChange, open);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=comboBoxController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comboBoxController.js","sourceRoot":"","sources":["../src/comboBoxController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAUtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAUtF,MAAM,UAAU,wBAAwB,CAAC,OAA4C;IACnF,MAAM,OAAO,GAAG,0BAA0B,CACxC;QACE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;QAC3B,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE;KACpE,EACD,OAAO,CAAC,UAAU,CACnB,CAAC;IACF,MAAM,UAAU,GAAG,mBAAmB,CAAqC,OAAO,CAAC,CAAC;IACpF,gBAAgB,CAAC,OAAO,EAAE,0BAA0B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE;QACjF,yBAAyB,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACnF,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5C,yBAAyB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAA8B;IACtE,MAAM,OAAO,GAAG,uBAAuB,CAA2B,UAAU,CAAC,CAAC;IAC9E,oBAAoB,CAAC,UAAU,EAAE,GAAG,EAAE;QACpC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QACtB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,UAA8B;IACzE,OAAO,uBAAuB,CAA2B,UAAU,CAAC,CAAC,OAAO,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAA8B;IACrE,OAAO,uBAAuB,CAA2B,UAAU,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAA8B,EAAE,IAAa;IACrF,MAAM,OAAO,GAAG,uBAAuB,CAA2B,UAAU,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO;IAC/E,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from './buttonController';
|
|
2
|
+
export * from './comboBoxController';
|
|
3
|
+
export { createListController, disposeListController, getListControllerSelectedIndex, getListControllerSignals, setListControllerSelectedIndex, } from './listController';
|
|
4
|
+
export * from './progressBarController';
|
|
5
|
+
export * from './radioGroupController';
|
|
6
|
+
export * from './scrollBarController';
|
|
7
|
+
export * from './scrollViewController';
|
|
8
|
+
export * from './sliderController';
|
|
9
|
+
export * from './splitPaneController';
|
|
10
|
+
export * from './tabBarController';
|
|
11
|
+
export * from './textInputController';
|
|
12
|
+
export * from './toggleController';
|
|
13
|
+
export * from './tooltipController';
|
|
14
|
+
export * from './treeViewController';
|
|
15
|
+
export * from './windowController';
|
|
16
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
|
package/dist/contract.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from './buttonController';
|
|
2
|
+
export * from './comboBoxController';
|
|
3
|
+
export { createListController, disposeListController, getListControllerSelectedIndex, getListControllerSignals, setListControllerSelectedIndex, } from './listController';
|
|
4
|
+
export * from './progressBarController';
|
|
5
|
+
export * from './radioGroupController';
|
|
6
|
+
export * from './scrollBarController';
|
|
7
|
+
export * from './scrollViewController';
|
|
8
|
+
export * from './sliderController';
|
|
9
|
+
export * from './splitPaneController';
|
|
10
|
+
export * from './tabBarController';
|
|
11
|
+
export * from './textInputController';
|
|
12
|
+
export * from './toggleController';
|
|
13
|
+
export * from './tooltipController';
|
|
14
|
+
export * from './treeViewController';
|
|
15
|
+
export * from './windowController';
|
|
16
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Entity, EntityRuntime, GuiOrientation, GuiTransitionDescriptor, GuiTransitionProperty, GuiTransitionValue, InteractionSignals, Node2D, Signal } from '@flighthq/types/contract';
|
|
2
|
+
interface GuiControllerRuntime extends EntityRuntime {
|
|
3
|
+
cleanups: Array<() => void>;
|
|
4
|
+
disposed: boolean;
|
|
5
|
+
hitStates: Map<Node2D, boolean>;
|
|
6
|
+
transition: Readonly<GuiTransitionDescriptor> | null;
|
|
7
|
+
}
|
|
8
|
+
export declare function clampGuiValue(value: number, minimum: number, maximum: number): number;
|
|
9
|
+
export declare function configureGuiHitArea(runtime: GuiControllerRuntime, target: Node2D, hitArea: Node2D): void;
|
|
10
|
+
export declare function connectGuiInteraction(runtime: GuiControllerRuntime, target: Node2D, name: keyof InteractionSignals, slot: (...args: any[]) => void): void;
|
|
11
|
+
export declare function connectGuiSignal<T extends (...args: any[]) => void>(runtime: GuiControllerRuntime, signal: Signal<T>, slot: T): void;
|
|
12
|
+
export declare function createGuiController<Controller extends Entity, Runtime extends GuiControllerRuntime>(runtime: Runtime): Controller;
|
|
13
|
+
export declare function createGuiControllerRuntime<Runtime extends object>(fields: Runtime, transition?: Readonly<GuiTransitionDescriptor>): Runtime & GuiControllerRuntime;
|
|
14
|
+
export declare function disposeGuiController(controller: Entity, clear: () => void): void;
|
|
15
|
+
export declare function getGuiControllerRuntime<Runtime extends object = object>(controller: Entity): Runtime & GuiControllerRuntime;
|
|
16
|
+
export declare function getGuiLength(target: Node2D, orientation: GuiOrientation): number;
|
|
17
|
+
export declare function getGuiPosition(target: Node2D, orientation: GuiOrientation): number;
|
|
18
|
+
export declare function setGuiPosition(runtime: GuiControllerRuntime, target: Node2D | null, orientation: GuiOrientation, value: number): void;
|
|
19
|
+
export declare function setGuiScale(runtime: GuiControllerRuntime, target: Node2D | null, orientation: GuiOrientation, value: number): void;
|
|
20
|
+
export declare function setGuiVisible(runtime: GuiControllerRuntime, target: Node2D | null, visible: boolean): void;
|
|
21
|
+
export declare function setGuiVisualProperty(runtime: GuiControllerRuntime, target: Node2D | null, property: GuiTransitionProperty, value: GuiTransitionValue): void;
|
|
22
|
+
export declare function snapGuiValue(value: number, minimum: number, step: number | null): number;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=guiController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guiController.d.ts","sourceRoot":"","sources":["../src/guiController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { enableInteractionSignals, getNodeHitArea, isNodeHitTestEnabled, setNodeHitArea, setNodeHitTestEnabled, } from '@flighthq/interaction/contract';
|
|
3
|
+
import { getNodeHeight, getNodeWidth, invalidateNodeAppearance, invalidateNodeLocalTransform, } from '@flighthq/node/contract';
|
|
4
|
+
import { connectSignal, disconnectSignal } from '@flighthq/signals/contract';
|
|
5
|
+
import { EntityRuntimeKey } from '@flighthq/types/contract';
|
|
6
|
+
export function clampGuiValue(value, minimum, maximum) {
|
|
7
|
+
if (!Number.isFinite(value))
|
|
8
|
+
return minimum;
|
|
9
|
+
if (minimum > maximum)
|
|
10
|
+
[minimum, maximum] = [maximum, minimum];
|
|
11
|
+
return Math.max(minimum, Math.min(maximum, value));
|
|
12
|
+
}
|
|
13
|
+
export function configureGuiHitArea(runtime, target, hitArea) {
|
|
14
|
+
const previous = getNodeHitArea(target);
|
|
15
|
+
setNodeHitArea(target, hitArea);
|
|
16
|
+
runtime.cleanups.push(() => setNodeHitArea(target, previous));
|
|
17
|
+
}
|
|
18
|
+
export function connectGuiInteraction(runtime, target, name, slot) {
|
|
19
|
+
if (!runtime.hitStates.has(target)) {
|
|
20
|
+
runtime.hitStates.set(target, isNodeHitTestEnabled(target));
|
|
21
|
+
setNodeHitTestEnabled(target, true);
|
|
22
|
+
}
|
|
23
|
+
const signal = enableInteractionSignals(target)[name];
|
|
24
|
+
connectSignal(signal, slot);
|
|
25
|
+
runtime.cleanups.push(() => disconnectSignal(signal, slot));
|
|
26
|
+
}
|
|
27
|
+
export function connectGuiSignal(runtime, signal, slot) {
|
|
28
|
+
connectSignal(signal, slot);
|
|
29
|
+
runtime.cleanups.push(() => disconnectSignal(signal, slot));
|
|
30
|
+
}
|
|
31
|
+
export function createGuiController(runtime) {
|
|
32
|
+
const controller = { [EntityRuntimeKey]: runtime };
|
|
33
|
+
return controller;
|
|
34
|
+
}
|
|
35
|
+
export function createGuiControllerRuntime(fields, transition) {
|
|
36
|
+
return {
|
|
37
|
+
...fields,
|
|
38
|
+
binding: null,
|
|
39
|
+
cleanups: [],
|
|
40
|
+
disposed: false,
|
|
41
|
+
hitStates: new Map(),
|
|
42
|
+
transition: transition ?? null,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function disposeGuiController(controller, clear) {
|
|
46
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
47
|
+
if (runtime.disposed)
|
|
48
|
+
return;
|
|
49
|
+
runtime.disposed = true;
|
|
50
|
+
for (let i = runtime.cleanups.length - 1; i >= 0; i--)
|
|
51
|
+
runtime.cleanups[i]();
|
|
52
|
+
runtime.cleanups.length = 0;
|
|
53
|
+
for (const [target, enabled] of runtime.hitStates)
|
|
54
|
+
setNodeHitTestEnabled(target, enabled);
|
|
55
|
+
runtime.hitStates.clear();
|
|
56
|
+
clear();
|
|
57
|
+
}
|
|
58
|
+
export function getGuiControllerRuntime(controller) {
|
|
59
|
+
return controller[EntityRuntimeKey];
|
|
60
|
+
}
|
|
61
|
+
export function getGuiLength(target, orientation) {
|
|
62
|
+
return orientation === 'horizontal' ? getNodeWidth(target) : getNodeHeight(target);
|
|
63
|
+
}
|
|
64
|
+
export function getGuiPosition(target, orientation) {
|
|
65
|
+
return orientation === 'horizontal' ? target.x : target.y;
|
|
66
|
+
}
|
|
67
|
+
export function setGuiPosition(runtime, target, orientation, value) {
|
|
68
|
+
setGuiVisualProperty(runtime, target, orientation === 'horizontal' ? 'x' : 'y', value);
|
|
69
|
+
}
|
|
70
|
+
export function setGuiScale(runtime, target, orientation, value) {
|
|
71
|
+
setGuiVisualProperty(runtime, target, orientation === 'horizontal' ? 'scaleX' : 'scaleY', value);
|
|
72
|
+
}
|
|
73
|
+
export function setGuiVisible(runtime, target, visible) {
|
|
74
|
+
setGuiVisualProperty(runtime, target, 'visible', visible);
|
|
75
|
+
}
|
|
76
|
+
export function setGuiVisualProperty(runtime, target, property, value) {
|
|
77
|
+
if (target === null || runtime.disposed)
|
|
78
|
+
return;
|
|
79
|
+
const from = target[property];
|
|
80
|
+
if (from === value)
|
|
81
|
+
return;
|
|
82
|
+
const apply = (next = value) => {
|
|
83
|
+
if (typeof from !== typeof next)
|
|
84
|
+
return;
|
|
85
|
+
target[property] = next;
|
|
86
|
+
if (property === 'alpha' || property === 'visible')
|
|
87
|
+
invalidateNodeAppearance(target);
|
|
88
|
+
else
|
|
89
|
+
invalidateNodeLocalTransform(target);
|
|
90
|
+
};
|
|
91
|
+
if (runtime.transition === null)
|
|
92
|
+
apply();
|
|
93
|
+
else
|
|
94
|
+
runtime.transition.run({ apply, from, property, target, value });
|
|
95
|
+
}
|
|
96
|
+
export function snapGuiValue(value, minimum, step) {
|
|
97
|
+
if (step === null || !(step > 0) || !Number.isFinite(step))
|
|
98
|
+
return value;
|
|
99
|
+
return minimum + Math.round((value - minimum) / step) * step;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=guiController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guiController.js","sourceRoot":"","sources":["../src/guiController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { InteractionSignals, Node2D, PointerEventData } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createGuiTestNode(width?: number, height?: number): Node2D;
|
|
3
|
+
export declare function emitGuiKeyboard(target: Node2D, name: keyof InteractionSignals, key: string): void;
|
|
4
|
+
export declare function emitGuiPointer(target: Node2D, name: keyof InteractionSignals, fields?: Readonly<Partial<PointerEventData>>): void;
|
|
5
|
+
//# sourceMappingURL=guiTestHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guiTestHelper.d.ts","sourceRoot":"","sources":["../src/guiTestHelper.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,kBAAkB,EAElB,MAAM,EAEN,gBAAgB,EAEjB,MAAM,0BAA0B,CAAC;AAGlC,wBAAgB,iBAAiB,CAAC,KAAK,SAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAiBlE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAUjG;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,kBAAkB,EAC9B,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAC3C,IAAI,CAuBN"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { getInteractionSignals } from '@flighthq/interaction/contract';
|
|
2
|
+
import { createNode, createNodeRuntime, initAppearanceTrait, initBoundsRectangleRuntimeTrait, initBoundsRectangleTrait, initTransform2DRuntimeTrait, initTransform2DTrait, } from '@flighthq/node/contract';
|
|
3
|
+
import { DisplayObjectKind, Node2DTraitsKey } from '@flighthq/types/contract';
|
|
4
|
+
export function createGuiTestNode(width = 100, height = 20) {
|
|
5
|
+
const runtime = createNodeRuntime();
|
|
6
|
+
runtime.traits = Node2DTraitsKey;
|
|
7
|
+
runtime.scene2d = null;
|
|
8
|
+
initTransform2DRuntimeTrait(runtime);
|
|
9
|
+
initBoundsRectangleRuntimeTrait(runtime);
|
|
10
|
+
runtime.computeLocalBoundsRectangle = (out) => {
|
|
11
|
+
out.x = 0;
|
|
12
|
+
out.y = 0;
|
|
13
|
+
out.width = width;
|
|
14
|
+
out.height = height;
|
|
15
|
+
};
|
|
16
|
+
const node = createNode(DisplayObjectKind, undefined, undefined, () => runtime);
|
|
17
|
+
initTransform2DTrait(node);
|
|
18
|
+
initBoundsRectangleTrait(node);
|
|
19
|
+
initAppearanceTrait(node);
|
|
20
|
+
return node;
|
|
21
|
+
}
|
|
22
|
+
export function emitGuiKeyboard(target, name, key) {
|
|
23
|
+
const data = {
|
|
24
|
+
altKey: false,
|
|
25
|
+
ctrlKey: false,
|
|
26
|
+
key,
|
|
27
|
+
keyCode: key.length === 1 ? key.charCodeAt(0) : 0,
|
|
28
|
+
metaKey: false,
|
|
29
|
+
shiftKey: false,
|
|
30
|
+
};
|
|
31
|
+
getInteractionSignals(target)[name].emit(data);
|
|
32
|
+
}
|
|
33
|
+
export function emitGuiPointer(target, name, fields) {
|
|
34
|
+
const data = {
|
|
35
|
+
altKey: false,
|
|
36
|
+
button: 0,
|
|
37
|
+
buttons: 0,
|
|
38
|
+
ctrlKey: false,
|
|
39
|
+
currentTarget: target,
|
|
40
|
+
deltaX: 0,
|
|
41
|
+
deltaY: 0,
|
|
42
|
+
localX: 0,
|
|
43
|
+
localY: 0,
|
|
44
|
+
metaKey: false,
|
|
45
|
+
pointerId: 1,
|
|
46
|
+
pointerType: 'mouse',
|
|
47
|
+
shiftKey: false,
|
|
48
|
+
target,
|
|
49
|
+
worldX: 0,
|
|
50
|
+
worldY: 0,
|
|
51
|
+
x: 0,
|
|
52
|
+
y: 0,
|
|
53
|
+
...fields,
|
|
54
|
+
};
|
|
55
|
+
getInteractionSignals(target)[name].emit(data);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=guiTestHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guiTestHelper.js","sourceRoot":"","sources":["../src/guiTestHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,+BAA+B,EAC/B,wBAAwB,EACxB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AASjC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE9E,MAAM,UAAU,iBAAiB,CAAC,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE;IACxD,MAAM,OAAO,GAAG,iBAAiB,EAAmB,CAAC;IACrD,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC;IACjC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACrC,+BAA+B,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,2BAA2B,GAAG,CAAC,GAAc,EAAE,EAAE;QACvD,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACV,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACV,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAClB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,UAAU,CAAC,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAW,CAAC;IAC1F,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3B,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC/B,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,IAA8B,EAAE,GAAW;IACzF,MAAM,IAAI,GAAsB;QAC9B,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK;QACd,GAAG;QACH,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,KAAK;KAChB,CAAC;IACD,qBAAqB,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC,IAAoD,CAAC,IAAI,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,IAA8B,EAC9B,MAA4C;IAE5C,MAAM,IAAI,GAAqB;QAC7B,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,MAAM;QACrB,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,KAAK;QACf,MAAM;QACN,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,GAAG,MAAM;KACV,CAAC;IACD,qBAAqB,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC,IAAmD,CAAC,IAAI,CAAC,CAAC;AAClG,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { blurTextInputController, createButtonController, createComboBoxController, createListController, createProgressBarController, createRadioGroupController, createScrollBarController, createScrollViewController, createSliderController, createSplitPaneController, createTabBarController, createTextInputController, createToggleController, createTooltipController, createTreeViewController, createWindowController, dispatchTextInputControllerKeyDown, dispatchTextInputControllerText, disposeButtonController, disposeComboBoxController, disposeListController, disposeProgressBarController, disposeRadioGroupController, disposeScrollBarController, disposeScrollViewController, disposeSliderController, disposeSplitPaneController, disposeTabBarController, disposeTextInputController, disposeToggleController, disposeTooltipController, disposeTreeViewController, disposeWindowController, focusTextInputController, getButtonControllerSignals, getComboBoxControllerSignals, getListControllerSelectedIndex, getListControllerSignals, getProgressBarControllerValue, getRadioGroupControllerSelectedIndex, getRadioGroupControllerSignals, getScrollBarControllerSignals, getScrollBarControllerValue, getScrollViewControllerSignals, getScrollViewControllerX, getScrollViewControllerY, getSliderControllerSignals, getSliderControllerValue, getSplitPaneControllerPosition, getSplitPaneControllerSignals, getTabBarControllerSelectedIndex, getTabBarControllerSignals, getTextInputControllerSignals, getToggleControllerSignals, getTreeViewControllerSelectedItem, getTreeViewControllerSignals, getWindowControllerSignals, hideTooltipController, isButtonControllerDisabled, isComboBoxControllerOpen, isToggleControllerChecked, isTreeViewControllerItemExpanded, setButtonControllerDisabled, setComboBoxControllerOpen, setListControllerSelectedIndex, setProgressBarControllerValue, setRadioGroupControllerSelectedIndex, setScrollBarControllerValue, setScrollViewControllerPosition, setSliderControllerValue, setSplitPaneControllerPosition, setTabBarControllerSelectedIndex, setToggleControllerChecked, setTreeViewControllerItemExpanded, setTreeViewControllerSelectedItem, setWindowControllerPosition, setWindowControllerSize, showTooltipController, toggleTreeViewControllerItem, } from './contract';
|
|
2
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,kCAAkC,EAClC,+BAA+B,EAC/B,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,6BAA6B,EAC7B,oCAAoC,EACpC,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,6BAA6B,EAC7B,gCAAgC,EAChC,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,EAC1B,iCAAiC,EACjC,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,2BAA2B,EAC3B,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,oCAAoC,EACpC,2BAA2B,EAC3B,+BAA+B,EAC/B,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,iCAAiC,EACjC,iCAAiC,EACjC,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { blurTextInputController, createButtonController, createComboBoxController, createListController, createProgressBarController, createRadioGroupController, createScrollBarController, createScrollViewController, createSliderController, createSplitPaneController, createTabBarController, createTextInputController, createToggleController, createTooltipController, createTreeViewController, createWindowController, dispatchTextInputControllerKeyDown, dispatchTextInputControllerText, disposeButtonController, disposeComboBoxController, disposeListController, disposeProgressBarController, disposeRadioGroupController, disposeScrollBarController, disposeScrollViewController, disposeSliderController, disposeSplitPaneController, disposeTabBarController, disposeTextInputController, disposeToggleController, disposeTooltipController, disposeTreeViewController, disposeWindowController, focusTextInputController, getButtonControllerSignals, getComboBoxControllerSignals, getListControllerSelectedIndex, getListControllerSignals, getProgressBarControllerValue, getRadioGroupControllerSelectedIndex, getRadioGroupControllerSignals, getScrollBarControllerSignals, getScrollBarControllerValue, getScrollViewControllerSignals, getScrollViewControllerX, getScrollViewControllerY, getSliderControllerSignals, getSliderControllerValue, getSplitPaneControllerPosition, getSplitPaneControllerSignals, getTabBarControllerSelectedIndex, getTabBarControllerSignals, getTextInputControllerSignals, getToggleControllerSignals, getTreeViewControllerSelectedItem, getTreeViewControllerSignals, getWindowControllerSignals, hideTooltipController, isButtonControllerDisabled, isComboBoxControllerOpen, isToggleControllerChecked, isTreeViewControllerItemExpanded, setButtonControllerDisabled, setComboBoxControllerOpen, setListControllerSelectedIndex, setProgressBarControllerValue, setRadioGroupControllerSelectedIndex, setScrollBarControllerValue, setScrollViewControllerPosition, setSliderControllerValue, setSplitPaneControllerPosition, setTabBarControllerSelectedIndex, setToggleControllerChecked, setTreeViewControllerItemExpanded, setTreeViewControllerSelectedItem, setWindowControllerPosition, setWindowControllerSize, showTooltipController, toggleTreeViewControllerItem, } from './contract';
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,kCAAkC,EAClC,+BAA+B,EAC/B,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,6BAA6B,EAC7B,oCAAoC,EACpC,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,6BAA6B,EAC7B,gCAAgC,EAChC,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,EAC1B,iCAAiC,EACjC,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,2BAA2B,EAC3B,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,oCAAoC,EACpC,2BAA2B,EAC3B,+BAA+B,EAC/B,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,iCAAiC,EACjC,iCAAiC,EACjC,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ListController, ListControllerOptions, ListControllerSignals } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createListController(options: Readonly<ListControllerOptions>): ListController;
|
|
3
|
+
export declare function disposeListController(controller: ListController): void;
|
|
4
|
+
export declare function getListControllerSelectedIndex(controller: ListController): number;
|
|
5
|
+
export declare function getListControllerSignals(controller: ListController): Readonly<ListControllerSignals>;
|
|
6
|
+
export declare function setListControllerSelectedIndex(controller: ListController, index: number): void;
|
|
7
|
+
export declare function setListControllerVisible(controller: ListController, visible: boolean): void;
|
|
8
|
+
//# sourceMappingURL=listController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listController.d.ts","sourceRoot":"","sources":["../src/listController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EAGtB,MAAM,0BAA0B,CAAC;AAyBlC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,cAAc,CAiC7F;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAQtE;AAED,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAEjF;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,cAAc,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAEpG;AAED,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAM9F;AAID,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAI3F"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createSignal, emitSignal } from '@flighthq/signals/contract';
|
|
2
|
+
import { connectGuiInteraction, connectGuiSignal, createGuiController, createGuiControllerRuntime, disposeGuiController, getGuiControllerRuntime, setGuiVisible, setGuiVisualProperty, } from './guiController';
|
|
3
|
+
import { getScrollBarControllerSignals } from './scrollBarController';
|
|
4
|
+
export function createListController(options) {
|
|
5
|
+
const runtime = createGuiControllerRuntime({
|
|
6
|
+
baseContentY: options.content.y,
|
|
7
|
+
content: options.content,
|
|
8
|
+
items: options.items.slice(),
|
|
9
|
+
scrollBar: options.scrollBar ?? null,
|
|
10
|
+
selectable: options.selectable ?? true,
|
|
11
|
+
selectedIndex: normalizeListIndex(options.selectedIndex ?? -1, options.items.length),
|
|
12
|
+
signals: { onActivate: createSignal(), onSelect: createSignal() },
|
|
13
|
+
viewport: options.viewport,
|
|
14
|
+
}, options.transition);
|
|
15
|
+
const controller = createGuiController(runtime);
|
|
16
|
+
runtime.items.forEach((item, index) => {
|
|
17
|
+
connectGuiInteraction(runtime, item, 'onClick', () => {
|
|
18
|
+
if (runtime.selectable)
|
|
19
|
+
setListControllerSelectedIndex(controller, index);
|
|
20
|
+
});
|
|
21
|
+
connectGuiInteraction(runtime, item, 'onDoubleClick', () => emitSignal(runtime.signals.onActivate, index));
|
|
22
|
+
connectGuiInteraction(runtime, item, 'onKeyDown', (data) => {
|
|
23
|
+
handleListControllerKeyDown(controller, data);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
connectGuiInteraction(runtime, options.viewport, 'onKeyDown', (data) => {
|
|
27
|
+
handleListControllerKeyDown(controller, data);
|
|
28
|
+
});
|
|
29
|
+
if (runtime.scrollBar !== null) {
|
|
30
|
+
connectGuiSignal(runtime, getScrollBarControllerSignals(runtime.scrollBar).onChange, (value) => {
|
|
31
|
+
setGuiVisualProperty(runtime, runtime.content, 'y', runtime.baseContentY - value);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return controller;
|
|
35
|
+
}
|
|
36
|
+
export function disposeListController(controller) {
|
|
37
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
38
|
+
disposeGuiController(controller, () => {
|
|
39
|
+
runtime.content = null;
|
|
40
|
+
runtime.items.length = 0;
|
|
41
|
+
runtime.scrollBar = null;
|
|
42
|
+
runtime.viewport = null;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
export function getListControllerSelectedIndex(controller) {
|
|
46
|
+
return getGuiControllerRuntime(controller).selectedIndex;
|
|
47
|
+
}
|
|
48
|
+
export function getListControllerSignals(controller) {
|
|
49
|
+
return getGuiControllerRuntime(controller).signals;
|
|
50
|
+
}
|
|
51
|
+
export function setListControllerSelectedIndex(controller, index) {
|
|
52
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
53
|
+
const next = normalizeListIndex(index, runtime.items.length);
|
|
54
|
+
if (runtime.selectedIndex === next || runtime.disposed)
|
|
55
|
+
return;
|
|
56
|
+
runtime.selectedIndex = next;
|
|
57
|
+
emitSignal(runtime.signals.onSelect, next);
|
|
58
|
+
}
|
|
59
|
+
// Package-private composition seam used by ComboBoxController. It changes only caller-owned visual
|
|
60
|
+
// visibility; it does not create or parent the list parts.
|
|
61
|
+
export function setListControllerVisible(controller, visible) {
|
|
62
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
63
|
+
setGuiVisible(runtime, runtime.viewport, visible);
|
|
64
|
+
setGuiVisible(runtime, runtime.content, visible);
|
|
65
|
+
}
|
|
66
|
+
function handleListControllerKeyDown(controller, data) {
|
|
67
|
+
const runtime = getGuiControllerRuntime(controller);
|
|
68
|
+
if (data.key === 'ArrowDown')
|
|
69
|
+
setListControllerSelectedIndex(controller, Math.min(runtime.items.length - 1, runtime.selectedIndex + 1));
|
|
70
|
+
else if (data.key === 'ArrowUp')
|
|
71
|
+
setListControllerSelectedIndex(controller, Math.max(0, runtime.selectedIndex - 1));
|
|
72
|
+
else if (data.key === 'Home')
|
|
73
|
+
setListControllerSelectedIndex(controller, runtime.items.length === 0 ? -1 : 0);
|
|
74
|
+
else if (data.key === 'End')
|
|
75
|
+
setListControllerSelectedIndex(controller, runtime.items.length - 1);
|
|
76
|
+
else if (data.key === 'Enter' && runtime.selectedIndex >= 0)
|
|
77
|
+
emitSignal(runtime.signals.onActivate, runtime.selectedIndex);
|
|
78
|
+
}
|
|
79
|
+
function normalizeListIndex(index, length) {
|
|
80
|
+
return index >= 0 && index < length ? index : -1;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=listController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listController.js","sourceRoot":"","sources":["../src/listController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ProgressBarController, ProgressBarControllerOptions } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createProgressBarController(options: Readonly<ProgressBarControllerOptions>): ProgressBarController;
|
|
3
|
+
export declare function disposeProgressBarController(controller: ProgressBarController): void;
|
|
4
|
+
export declare function getProgressBarControllerValue(controller: ProgressBarController): number;
|
|
5
|
+
export declare function setProgressBarControllerValue(controller: ProgressBarController, value: number): void;
|
|
6
|
+
//# sourceMappingURL=progressBarController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressBarController.d.ts","sourceRoot":"","sources":["../src/progressBarController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,qBAAqB,EACrB,4BAA4B,EAC7B,MAAM,0BAA0B,CAAC;AAqBlC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAAG,qBAAqB,CAmBlH;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAMpF;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM,CAEvF;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMpG"}
|