@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.
Files changed (96) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +17 -0
  3. package/dist/buttonController.d.ts +7 -0
  4. package/dist/buttonController.d.ts.map +1 -0
  5. package/dist/buttonController.js +83 -0
  6. package/dist/buttonController.js.map +1 -0
  7. package/dist/comboBoxController.d.ts +7 -0
  8. package/dist/comboBoxController.d.ts.map +1 -0
  9. package/dist/comboBoxController.js +46 -0
  10. package/dist/comboBoxController.js.map +1 -0
  11. package/dist/contract.d.ts +16 -0
  12. package/dist/contract.d.ts.map +1 -0
  13. package/dist/contract.js +16 -0
  14. package/dist/contract.js.map +1 -0
  15. package/dist/guiController.d.ts +24 -0
  16. package/dist/guiController.d.ts.map +1 -0
  17. package/dist/guiController.js +101 -0
  18. package/dist/guiController.js.map +1 -0
  19. package/dist/guiTestHelper.d.ts +5 -0
  20. package/dist/guiTestHelper.d.ts.map +1 -0
  21. package/dist/guiTestHelper.js +57 -0
  22. package/dist/guiTestHelper.js.map +1 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +2 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/listController.d.ts +8 -0
  28. package/dist/listController.d.ts.map +1 -0
  29. package/dist/listController.js +82 -0
  30. package/dist/listController.js.map +1 -0
  31. package/dist/progressBarController.d.ts +6 -0
  32. package/dist/progressBarController.d.ts.map +1 -0
  33. package/dist/progressBarController.js +42 -0
  34. package/dist/progressBarController.js.map +1 -0
  35. package/dist/radioGroupController.d.ts +7 -0
  36. package/dist/radioGroupController.d.ts.map +1 -0
  37. package/dist/radioGroupController.js +50 -0
  38. package/dist/radioGroupController.js.map +1 -0
  39. package/dist/scrollBarController.d.ts +7 -0
  40. package/dist/scrollBarController.d.ts.map +1 -0
  41. package/dist/scrollBarController.js +124 -0
  42. package/dist/scrollBarController.js.map +1 -0
  43. package/dist/scrollViewController.d.ts +8 -0
  44. package/dist/scrollViewController.d.ts.map +1 -0
  45. package/dist/scrollViewController.js +99 -0
  46. package/dist/scrollViewController.js.map +1 -0
  47. package/dist/sliderController.d.ts +7 -0
  48. package/dist/sliderController.d.ts.map +1 -0
  49. package/dist/sliderController.js +105 -0
  50. package/dist/sliderController.js.map +1 -0
  51. package/dist/splitPaneController.d.ts +7 -0
  52. package/dist/splitPaneController.d.ts.map +1 -0
  53. package/dist/splitPaneController.js +87 -0
  54. package/dist/splitPaneController.js.map +1 -0
  55. package/dist/tabBarController.d.ts +7 -0
  56. package/dist/tabBarController.d.ts.map +1 -0
  57. package/dist/tabBarController.js +43 -0
  58. package/dist/tabBarController.js.map +1 -0
  59. package/dist/textInputController.d.ts +9 -0
  60. package/dist/textInputController.d.ts.map +1 -0
  61. package/dist/textInputController.js +132 -0
  62. package/dist/textInputController.js.map +1 -0
  63. package/dist/toggleController.d.ts +7 -0
  64. package/dist/toggleController.d.ts.map +1 -0
  65. package/dist/toggleController.js +57 -0
  66. package/dist/toggleController.js.map +1 -0
  67. package/dist/tooltipController.d.ts +6 -0
  68. package/dist/tooltipController.d.ts.map +1 -0
  69. package/dist/tooltipController.js +62 -0
  70. package/dist/tooltipController.js.map +1 -0
  71. package/dist/treeViewController.d.ts +10 -0
  72. package/dist/treeViewController.d.ts.map +1 -0
  73. package/dist/treeViewController.js +128 -0
  74. package/dist/treeViewController.js.map +1 -0
  75. package/dist/windowController.d.ts +7 -0
  76. package/dist/windowController.d.ts.map +1 -0
  77. package/dist/windowController.js +119 -0
  78. package/dist/windowController.js.map +1 -0
  79. package/package.json +53 -0
  80. package/src/buttonController.test.ts +90 -0
  81. package/src/comboBoxController.test.ts +71 -0
  82. package/src/guiController.test.ts +162 -0
  83. package/src/guiTreeShaking.test.ts +35 -0
  84. package/src/listController.test.ts +96 -0
  85. package/src/progressBarController.test.ts +49 -0
  86. package/src/radioGroupController.test.ts +61 -0
  87. package/src/scrollBarController.test.ts +86 -0
  88. package/src/scrollViewController.test.ts +80 -0
  89. package/src/sliderController.test.ts +74 -0
  90. package/src/splitPaneController.test.ts +85 -0
  91. package/src/tabBarController.test.ts +50 -0
  92. package/src/textInputController.test.ts +93 -0
  93. package/src/toggleController.test.ts +72 -0
  94. package/src/tooltipController.test.ts +56 -0
  95. package/src/treeViewController.test.ts +105 -0
  96. 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"}
@@ -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"}
@@ -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"}