@gorilla-engine-sdk/gorilla-engine-react 1.6.1

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 (79) hide show
  1. package/LICENSE.md +64 -0
  2. package/README.md +345 -0
  3. package/dist/ComponentFactory.d.ts +180 -0
  4. package/dist/ComponentFactory.js +118 -0
  5. package/dist/GEReact.d.ts +53 -0
  6. package/dist/GEReact.js +237 -0
  7. package/dist/Root.d.ts +15 -0
  8. package/dist/Root.js +52 -0
  9. package/dist/hooks/useInstrument.d.ts +27 -0
  10. package/dist/hooks/useInstrument.js +109 -0
  11. package/dist/hooks/useInstrumentProperty.d.ts +47 -0
  12. package/dist/hooks/useInstrumentProperty.js +113 -0
  13. package/dist/index.d.ts +50 -0
  14. package/dist/index.js +67 -0
  15. package/dist/instance.d.ts +18 -0
  16. package/dist/instance.js +16 -0
  17. package/dist/nativeWrappers/GEAmpEnv.d.ts +9 -0
  18. package/dist/nativeWrappers/GEAmpEnv.js +12 -0
  19. package/dist/nativeWrappers/GEBarStepEditor.d.ts +12 -0
  20. package/dist/nativeWrappers/GEBarStepEditor.js +16 -0
  21. package/dist/nativeWrappers/GEButton.d.ts +17 -0
  22. package/dist/nativeWrappers/GEButton.js +21 -0
  23. package/dist/nativeWrappers/GEComboBox.d.ts +18 -0
  24. package/dist/nativeWrappers/GEComboBox.js +16 -0
  25. package/dist/nativeWrappers/GECurve.d.ts +9 -0
  26. package/dist/nativeWrappers/GECurve.js +12 -0
  27. package/dist/nativeWrappers/GEDragContainer.d.ts +24 -0
  28. package/dist/nativeWrappers/GEDragContainer.js +22 -0
  29. package/dist/nativeWrappers/GEDragTarget.d.ts +20 -0
  30. package/dist/nativeWrappers/GEDragTarget.js +20 -0
  31. package/dist/nativeWrappers/GEDropZone.d.ts +22 -0
  32. package/dist/nativeWrappers/GEDropZone.js +20 -0
  33. package/dist/nativeWrappers/GEKnob.d.ts +18 -0
  34. package/dist/nativeWrappers/GEKnob.js +19 -0
  35. package/dist/nativeWrappers/GELabel.d.ts +16 -0
  36. package/dist/nativeWrappers/GELabel.js +20 -0
  37. package/dist/nativeWrappers/GELevelMeter.d.ts +8 -0
  38. package/dist/nativeWrappers/GELevelMeter.js +12 -0
  39. package/dist/nativeWrappers/GEListBox.d.ts +17 -0
  40. package/dist/nativeWrappers/GEListBox.js +15 -0
  41. package/dist/nativeWrappers/GELottieAnimation.d.ts +16 -0
  42. package/dist/nativeWrappers/GELottieAnimation.js +17 -0
  43. package/dist/nativeWrappers/GEMappingEditor.d.ts +24 -0
  44. package/dist/nativeWrappers/GEMappingEditor.js +22 -0
  45. package/dist/nativeWrappers/GEMidiKeyboard.d.ts +8 -0
  46. package/dist/nativeWrappers/GEMidiKeyboard.js +12 -0
  47. package/dist/nativeWrappers/GEPad.d.ts +15 -0
  48. package/dist/nativeWrappers/GEPad.js +16 -0
  49. package/dist/nativeWrappers/GERubberband.d.ts +16 -0
  50. package/dist/nativeWrappers/GERubberband.js +17 -0
  51. package/dist/nativeWrappers/GEScrollView.d.ts +26 -0
  52. package/dist/nativeWrappers/GEScrollView.js +21 -0
  53. package/dist/nativeWrappers/GESliceEditor.d.ts +30 -0
  54. package/dist/nativeWrappers/GESliceEditor.js +23 -0
  55. package/dist/nativeWrappers/GESlider.d.ts +20 -0
  56. package/dist/nativeWrappers/GESlider.js +20 -0
  57. package/dist/nativeWrappers/GEStepEditor.d.ts +12 -0
  58. package/dist/nativeWrappers/GEStepEditor.js +16 -0
  59. package/dist/nativeWrappers/GETagBrowser.d.ts +15 -0
  60. package/dist/nativeWrappers/GETagBrowser.js +16 -0
  61. package/dist/nativeWrappers/GETagEditor.d.ts +15 -0
  62. package/dist/nativeWrappers/GETagEditor.js +16 -0
  63. package/dist/nativeWrappers/GETextBox.d.ts +22 -0
  64. package/dist/nativeWrappers/GETextBox.js +20 -0
  65. package/dist/nativeWrappers/GEToggle.d.ts +18 -0
  66. package/dist/nativeWrappers/GEToggle.js +16 -0
  67. package/dist/nativeWrappers/GEWaveform.d.ts +17 -0
  68. package/dist/nativeWrappers/GEWaveform.js +17 -0
  69. package/dist/nativeWrappers/GEXYPad.d.ts +16 -0
  70. package/dist/nativeWrappers/GEXYPad.js +17 -0
  71. package/dist/nativeWrappers/common/GEComponent.d.ts +104 -0
  72. package/dist/nativeWrappers/common/GEComponent.js +226 -0
  73. package/dist/nativeWrappers/common/ReactElementProps.d.ts +20 -0
  74. package/dist/nativeWrappers/common/ReactElementProps.js +3 -0
  75. package/dist/nativeWrappers/common/clickableHandlerMappings.d.ts +40 -0
  76. package/dist/nativeWrappers/common/clickableHandlerMappings.js +21 -0
  77. package/dist/nativeWrappers/common/keyableHandlerMappings.d.ts +16 -0
  78. package/dist/nativeWrappers/common/keyableHandlerMappings.js +13 -0
  79. package/package.json +59 -0
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const GELabel_1 = require("./nativeWrappers/GELabel");
4
+ const GEButton_1 = require("./nativeWrappers/GEButton");
5
+ const GETextBox_1 = require("./nativeWrappers/GETextBox");
6
+ const GEScrollView_1 = require("./nativeWrappers/GEScrollView");
7
+ const GEToggle_1 = require("./nativeWrappers/GEToggle");
8
+ const GEComboBox_1 = require("./nativeWrappers/GEComboBox");
9
+ const GECurve_1 = require("./nativeWrappers/GECurve");
10
+ const GEMidiKeyboard_1 = require("./nativeWrappers/GEMidiKeyboard");
11
+ const GEKnob_1 = require("./nativeWrappers/GEKnob");
12
+ const GEPad_1 = require("./nativeWrappers/GEPad");
13
+ const GESliceEditor_1 = require("./nativeWrappers/GESliceEditor");
14
+ const GELevelMeter_1 = require("./nativeWrappers/GELevelMeter");
15
+ const GEWaveform_1 = require("./nativeWrappers/GEWaveform");
16
+ const GEAmpEnv_1 = require("./nativeWrappers/GEAmpEnv");
17
+ const GEListBox_1 = require("./nativeWrappers/GEListBox");
18
+ const GEBarStepEditor_1 = require("./nativeWrappers/GEBarStepEditor");
19
+ const GEStepEditor_1 = require("./nativeWrappers/GEStepEditor");
20
+ const GEDragContainer_1 = require("./nativeWrappers/GEDragContainer");
21
+ const GEDropZone_1 = require("./nativeWrappers/GEDropZone");
22
+ const GEDragTarget_1 = require("./nativeWrappers/GEDragTarget");
23
+ const GELottieAnimation_1 = require("./nativeWrappers/GELottieAnimation");
24
+ const GESlider_1 = require("./nativeWrappers/GESlider");
25
+ const GEXYPad_1 = require("./nativeWrappers/GEXYPad");
26
+ const GERubberband_1 = require("./nativeWrappers/GERubberband");
27
+ const GETagBrowser_1 = require("./nativeWrappers/GETagBrowser");
28
+ const GETagEditor_1 = require("./nativeWrappers/GETagEditor");
29
+ const GEMappingEditor_1 = require("./nativeWrappers/GEMappingEditor");
30
+ /**
31
+ * Factory that instantiates Gorilla Engine native component wrappers
32
+ * from JSX element type strings and props.
33
+ *
34
+ * Used by the reconciler's `createInstance` and `createTextInstance` hooks
35
+ * to translate React elements into native {@link GEComponent} instances.
36
+ */
37
+ class ComponentFactory {
38
+ /**
39
+ * Creates a {@link GEComponent} wrapper for the given component type.
40
+ *
41
+ * @param type - The Gorilla Engine component type identifier (e.g., `'geKnob'`).
42
+ * @param newProps - Props to pass to the native component constructor.
43
+ * @returns A new `GEComponent` wrapping the corresponding native component.
44
+ * @throws If `type` is not a recognized {@link GEComponentType}.
45
+ */
46
+ static createComponent(type, newProps) {
47
+ switch (type) {
48
+ case 'geButton':
49
+ return new GEButton_1.GEButton({
50
+ keyboardFocus: {
51
+ color: '00FFFFFF',
52
+ },
53
+ ...newProps,
54
+ });
55
+ case 'geLabel':
56
+ return new GELabel_1.GELabel(newProps);
57
+ case 'geTextBox':
58
+ return new GETextBox_1.GETextBox(newProps);
59
+ case 'geScrollView':
60
+ return new GEScrollView_1.GEScrollView(newProps);
61
+ case 'geToggle':
62
+ return new GEToggle_1.GEToggle(newProps);
63
+ case 'geComboBox':
64
+ return new GEComboBox_1.GEComboBox(newProps);
65
+ case 'geCurve':
66
+ return new GECurve_1.GECurve(newProps);
67
+ case 'geMidiKeyboard':
68
+ return new GEMidiKeyboard_1.GEMidiKeyboard(newProps);
69
+ case 'geKnob':
70
+ return new GEKnob_1.GEKnob(newProps);
71
+ case 'geSlider':
72
+ return new GESlider_1.GESlider(newProps);
73
+ case 'gePad':
74
+ return new GEPad_1.GEPad({
75
+ keyboardFocus: {
76
+ color: '00FFFFFF',
77
+ },
78
+ ...newProps,
79
+ });
80
+ case 'geSliceEditor':
81
+ return new GESliceEditor_1.GESliceEditor(newProps);
82
+ case 'geLevelMeter':
83
+ return new GELevelMeter_1.GELevelMeter(newProps);
84
+ case 'geWaveform':
85
+ return new GEWaveform_1.GEWaveform(newProps);
86
+ case 'geAmpEnv':
87
+ return new GEAmpEnv_1.GEAmpEnv(newProps);
88
+ case 'geListBox':
89
+ return new GEListBox_1.GEListBox(newProps);
90
+ case 'geStepEditor':
91
+ return new GEStepEditor_1.GEStepEditor(newProps);
92
+ case 'geBarStepEditor':
93
+ return new GEBarStepEditor_1.GEBarStepEditor(newProps);
94
+ case 'geDragContainer':
95
+ return new GEDragContainer_1.GEDragContainer(newProps);
96
+ case 'geDragTarget':
97
+ return new GEDragTarget_1.GEDragTarget(newProps);
98
+ case 'geDropZone':
99
+ return new GEDropZone_1.GEDropZone(newProps);
100
+ case 'geLottieAnimation':
101
+ return new GELottieAnimation_1.GELottieAnimation(newProps);
102
+ case 'geXYPad':
103
+ return new GEXYPad_1.GEXYPad(newProps);
104
+ case 'geRubberband':
105
+ return new GERubberband_1.GERubberband(newProps);
106
+ case 'geTagBrowser':
107
+ return new GETagBrowser_1.GETagBrowser(newProps);
108
+ case 'geTagEditor':
109
+ return new GETagEditor_1.GETagEditor(newProps);
110
+ case 'geMappingEditor':
111
+ return new GEMappingEditor_1.GEMappingEditor(newProps);
112
+ default:
113
+ throw new Error(`Unknown component type ${type}`);
114
+ }
115
+ }
116
+ }
117
+ exports.default = ComponentFactory;
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Db21wb25lbnRGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0Esc0RBQWlFO0FBQ2pFLHdEQUFvRTtBQUNwRSwwREFBdUU7QUFDdkUsZ0VBQWdGO0FBQ2hGLHdEQUFvRTtBQUNwRSw0REFBMEU7QUFDMUUsc0RBQWlFO0FBQ2pFLG9FQUFzRjtBQUN0RixvREFBOEQ7QUFDOUQsa0RBQTJEO0FBQzNELGtFQUFtRjtBQUNuRixnRUFBZ0Y7QUFDaEYsNERBQTBFO0FBQzFFLHdEQUFvRTtBQUNwRSwwREFBdUU7QUFDdkUsc0VBQXlGO0FBQ3pGLGdFQUFnRjtBQUNoRixzRUFBeUY7QUFDekYsNERBQTBFO0FBQzFFLGdFQUFnRjtBQUNoRiwwRUFBK0Y7QUFDL0Ysd0RBQW9FO0FBQ3BFLHNEQUFpRTtBQUNqRSxnRUFBZ0Y7QUFDaEYsZ0VBQWdGO0FBQ2hGLDhEQUE2RTtBQUM3RSxzRUFBeUY7QUFnTXpGOzs7Ozs7R0FNRztBQUNILE1BQU0sZ0JBQWdCO0lBQ3BCOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUNwQixJQUFxQixFQUNyQixRQUFtQztRQUVuQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxVQUFVO2dCQUNiLE9BQU8sSUFBSSxtQkFBUSxDQUFDO29CQUNsQixhQUFhLEVBQUU7d0JBQ2IsS0FBSyxFQUFFLFVBQVU7cUJBQ2xCO29CQUNELEdBQUcsUUFBUTtpQkFDSyxDQUFDLENBQUM7WUFDdEIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxpQkFBTyxDQUFDLFFBQXdCLENBQUMsQ0FBQztZQUMvQyxLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxJQUFJLHFCQUFTLENBQUMsUUFBMEIsQ0FBQyxDQUFDO1lBQ25ELEtBQUssY0FBYztnQkFDakIsT0FBTyxJQUFJLDJCQUFZLENBQUMsUUFBNkIsQ0FBQyxDQUFDO1lBQ3pELEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksbUJBQVEsQ0FBQyxRQUF5QixDQUFDLENBQUM7WUFDakQsS0FBSyxZQUFZO2dCQUNmLE9BQU8sSUFBSSx1QkFBVSxDQUFDLFFBQTJCLENBQUMsQ0FBQztZQUNyRCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLGlCQUFPLENBQUMsUUFBd0IsQ0FBQyxDQUFDO1lBQy9DLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLElBQUksK0JBQWMsQ0FBQyxRQUErQixDQUFDLENBQUM7WUFDN0QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxlQUFNLENBQUMsUUFBdUIsQ0FBQyxDQUFDO1lBQzdDLEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksbUJBQVEsQ0FBQyxRQUF5QixDQUFDLENBQUM7WUFDakQsS0FBSyxPQUFPO2dCQUNWLE9BQU8sSUFBSSxhQUFLLENBQUM7b0JBQ2YsYUFBYSxFQUFFO3dCQUNiLEtBQUssRUFBRSxVQUFVO3FCQUNsQjtvQkFDRCxHQUFHLFFBQVE7aUJBQ0UsQ0FBQyxDQUFDO1lBQ25CLEtBQUssZUFBZTtnQkFDbEIsT0FBTyxJQUFJLDZCQUFhLENBQUMsUUFBOEIsQ0FBQyxDQUFDO1lBQzNELEtBQUssY0FBYztnQkFDakIsT0FBTyxJQUFJLDJCQUFZLENBQUMsUUFBNkIsQ0FBQyxDQUFDO1lBQ3pELEtBQUssWUFBWTtnQkFDZixPQUFPLElBQUksdUJBQVUsQ0FBQyxRQUEyQixDQUFDLENBQUM7WUFDckQsS0FBSyxVQUFVO2dCQUNiLE9BQU8sSUFBSSxtQkFBUSxDQUFDLFFBQXlCLENBQUMsQ0FBQztZQUNqRCxLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxJQUFJLHFCQUFTLENBQUMsUUFBMEIsQ0FBQyxDQUFDO1lBQ25ELEtBQUssY0FBYztnQkFDakIsT0FBTyxJQUFJLDJCQUFZLENBQUMsUUFBNkIsQ0FBQyxDQUFDO1lBQ3pELEtBQUssaUJBQWlCO2dCQUNwQixPQUFPLElBQUksaUNBQWUsQ0FBQyxRQUFnQyxDQUFDLENBQUM7WUFDL0QsS0FBSyxpQkFBaUI7Z0JBQ3BCLE9BQU8sSUFBSSxpQ0FBZSxDQUFDLFFBQWdDLENBQUMsQ0FBQztZQUMvRCxLQUFLLGNBQWM7Z0JBQ2pCLE9BQU8sSUFBSSwyQkFBWSxDQUFDLFFBQTZCLENBQUMsQ0FBQztZQUN6RCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxJQUFJLHVCQUFVLENBQUMsUUFBMkIsQ0FBQyxDQUFDO1lBQ3JELEtBQUssbUJBQW1CO2dCQUN0QixPQUFPLElBQUkscUNBQWlCLENBQUMsUUFBa0MsQ0FBQyxDQUFDO1lBQ25FLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksaUJBQU8sQ0FBQyxRQUF3QixDQUFDLENBQUM7WUFDL0MsS0FBSyxjQUFjO2dCQUNqQixPQUFPLElBQUksMkJBQVksQ0FBQyxRQUE2QixDQUFDLENBQUM7WUFDekQsS0FBSyxjQUFjO2dCQUNqQixPQUFPLElBQUksMkJBQVksQ0FBQyxRQUE2QixDQUFDLENBQUM7WUFDekQsS0FBSyxhQUFhO2dCQUNoQixPQUFPLElBQUkseUJBQVcsQ0FBQyxRQUE0QixDQUFDLENBQUM7WUFDdkQsS0FBSyxpQkFBaUI7Z0JBQ3BCLE9BQU8sSUFBSSxpQ0FBZSxDQUFDLFFBQWdDLENBQUMsQ0FBQztZQUMvRDtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxrQkFBZSxnQkFBZ0IsQ0FBQyJ9
@@ -0,0 +1,53 @@
1
+ import * as React from 'react';
2
+ import { GEComponent } from './nativeWrappers/common/GEComponent';
3
+ import { Logger } from './instance';
4
+ /**
5
+ * A Gorilla Engine native UI component extended with a cached reconciler container.
6
+ * The `_rootContainer` field is attached lazily by {@link render} on first mount.
7
+ */
8
+ declare interface RootContainer extends GorillaEngine.UI.Component {
9
+ _rootContainer?: GEComponent<any>;
10
+ }
11
+ /**
12
+ * Renders a React element tree into a Gorilla Engine native container.
13
+ *
14
+ * Creates a reconciler root on the container if one does not already exist,
15
+ * then performs an update. This is the low-level entry point — most consumers
16
+ * should use {@link loadUI} or {@link createUI} instead.
17
+ *
18
+ * @param reactElement - The React element tree to render.
19
+ * @param container - A native Gorilla Engine UI component to render into.
20
+ * @param callback - Optional callback invoked after the render commits.
21
+ */
22
+ export declare function render(reactElement: React.ReactNode, container: RootContainer, callback?: any): void;
23
+ /**
24
+ * Loads a plugin UI from a YAML layout file and mounts a React tree into it.
25
+ *
26
+ * This is the standard entry point for plugins that define their root layout
27
+ * in YAML. The YAML is loaded via `GorillaEngine.UI.loadUIfromYAML`, and the
28
+ * React tree is rendered into the container identified by `rootNodeId`.
29
+ *
30
+ * @param app - The root React element to render.
31
+ * @param ymlPath - Path to the YAML layout file. Defaults to `<resourcePath>/<pluginName>.yaml`.
32
+ * @param rootNodeId - ID of the native container node in the YAML layout. Defaults to `'root'`.
33
+ * @param logger - Optional custom {@link Logger} to replace the default console logger.
34
+ */
35
+ export declare function loadUI(app: React.ReactNode, ymlPath?: string | null, rootNodeId?: string, logger?: Logger): void;
36
+ /**
37
+ * Creates a new native window and mounts a React tree into it.
38
+ *
39
+ * Use this instead of {@link loadUI} when no YAML layout is needed —
40
+ * the entire UI is built programmatically from React components.
41
+ *
42
+ * @param app - The root React element to render.
43
+ * @param width - Window width in pixels. Defaults to `1280`.
44
+ * @param height - Window height in pixels. Defaults to `760`.
45
+ * @param options - Optional settings:
46
+ * - `rootNodeId` – ID assigned to the root window (defaults to `"root"`).
47
+ * - `logger` – Custom {@link Logger} instance.
48
+ */
49
+ export declare function createUI(app: React.ReactNode, width?: number, height?: number, options?: {
50
+ rootNodeId?: string;
51
+ logger?: Logger;
52
+ }): void;
53
+ export {};
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.render = render;
40
+ exports.loadUI = loadUI;
41
+ exports.createUI = createUI;
42
+ const React = __importStar(require("react"));
43
+ const ReactReconciler = __importStar(require("react-reconciler"));
44
+ const path = __importStar(require("path"));
45
+ const ComponentFactory_1 = __importDefault(require("./ComponentFactory"));
46
+ const instance_1 = require("./instance");
47
+ const Root_1 = require("./Root");
48
+ const rootHostContext = {};
49
+ const childHostContext = {};
50
+ /**
51
+ * React Reconciler host config that maps React lifecycle operations
52
+ * (create, append, update, remove) to Gorilla Engine native UI components
53
+ * via {@link ComponentFactory} and {@link GEComponent}.
54
+ */
55
+ const hostConfig = {
56
+ supportsMutation: true,
57
+ supportsPersistence: false,
58
+ supportsHydration: false,
59
+ noTimeout: -1,
60
+ isPrimaryRenderer: true,
61
+ getRootHostContext() {
62
+ return rootHostContext;
63
+ },
64
+ prepareForCommit() {
65
+ return null;
66
+ },
67
+ resetAfterCommit() { },
68
+ getChildHostContext() {
69
+ return childHostContext;
70
+ },
71
+ shouldSetTextContent(type, props) {
72
+ return false;
73
+ },
74
+ createInstance(type, newProps, rootContainerInstance, _currentHostContext, workInProgress) {
75
+ return ComponentFactory_1.default.createComponent(type, newProps);
76
+ },
77
+ createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {
78
+ return ComponentFactory_1.default.createComponent('geLabel', { text });
79
+ },
80
+ appendInitialChild(parentInstance, child) {
81
+ parentInstance.appendChild(child);
82
+ },
83
+ appendChild(parentInstance, child) {
84
+ parentInstance.appendChild(child);
85
+ },
86
+ finalizeInitialChildren(instance, type, props, rootContainer, hostContext) {
87
+ return false;
88
+ },
89
+ appendChildToContainer(container, child) {
90
+ container.appendChild(child.nativeHandle);
91
+ },
92
+ commitUpdate(instance, type, prevProps, nextProps, internalHandle) {
93
+ const updatePayload = instance.prepareUpdate(prevProps, nextProps);
94
+ if (updatePayload) {
95
+ instance.commitUpdate(updatePayload);
96
+ }
97
+ },
98
+ commitTextUpdate(textInstance, oldText, newText) {
99
+ textInstance.commitUpdate(textInstance.prepareUpdate({ text: oldText }, { text: newText }));
100
+ },
101
+ removeChild(parentInstance, child) {
102
+ parentInstance.removeChild(child);
103
+ },
104
+ removeChildFromContainer(container, child) {
105
+ container.removeChild(child.nativeHandle);
106
+ },
107
+ clearContainer(container) {
108
+ while (container.children.length) {
109
+ container.removeChild(container.children[0]);
110
+ }
111
+ },
112
+ insertBefore(parentInstance, child, beforeChild) {
113
+ parentInstance.insertBefore(child, beforeChild);
114
+ },
115
+ getPublicInstance(instance) {
116
+ return instance;
117
+ },
118
+ preparePortalMount(containerInfo) { },
119
+ scheduleTimeout: setTimeout,
120
+ cancelTimeout: clearTimeout,
121
+ setCurrentUpdatePriority(_priority) { },
122
+ getCurrentUpdatePriority() {
123
+ return 0;
124
+ },
125
+ resolveUpdatePriority() {
126
+ return 32; // DefaultEventPriority
127
+ },
128
+ trackSchedulerEvent() { },
129
+ resolveEventType() {
130
+ return null;
131
+ },
132
+ resolveEventTimeStamp() {
133
+ return -1;
134
+ },
135
+ shouldAttemptEagerTransition() {
136
+ return false;
137
+ },
138
+ detachDeletedInstance(_instance) { },
139
+ getInstanceFromNode(_node) {
140
+ return null;
141
+ },
142
+ beforeActiveInstanceBlur() { },
143
+ afterActiveInstanceBlur() { },
144
+ prepareScopeUpdate(_scopeInstance, _instance) { },
145
+ getInstanceFromScope(_scopeInstance) {
146
+ return null;
147
+ },
148
+ resetFormInstance(_form) { },
149
+ requestPostPaintCallback(_callback) { },
150
+ maySuspendCommit(_type, _props) {
151
+ return false;
152
+ },
153
+ preloadInstance(_type, _props) {
154
+ return true;
155
+ },
156
+ startSuspendingCommit() { },
157
+ suspendInstance(_type, _props) { },
158
+ waitForCommitToBeReady() {
159
+ return null;
160
+ },
161
+ NotPendingTransition: null,
162
+ HostTransitionContext: React.createContext(null),
163
+ };
164
+ const reconciler = ReactReconciler(hostConfig);
165
+ /**
166
+ * Renders a React element tree into a Gorilla Engine native container.
167
+ *
168
+ * Creates a reconciler root on the container if one does not already exist,
169
+ * then performs an update. This is the low-level entry point — most consumers
170
+ * should use {@link loadUI} or {@link createUI} instead.
171
+ *
172
+ * @param reactElement - The React element tree to render.
173
+ * @param container - A native Gorilla Engine UI component to render into.
174
+ * @param callback - Optional callback invoked after the render commits.
175
+ */
176
+ function render(reactElement, container, callback) {
177
+ // Create a root Container if it doesnt exist
178
+ if (!container._rootContainer) {
179
+ container._rootContainer = reconciler.createContainer(container, 0, null, null, null, null, (error) => {
180
+ throw error;
181
+ }, (error) => {
182
+ throw error;
183
+ }, (error) => {
184
+ console.error(error);
185
+ }, null);
186
+ }
187
+ // update the root Container
188
+ reconciler.updateContainer(reactElement, container._rootContainer, null, callback);
189
+ }
190
+ /**
191
+ * Loads a plugin UI from a YAML layout file and mounts a React tree into it.
192
+ *
193
+ * This is the standard entry point for plugins that define their root layout
194
+ * in YAML. The YAML is loaded via `GorillaEngine.UI.loadUIfromYAML`, and the
195
+ * React tree is rendered into the container identified by `rootNodeId`.
196
+ *
197
+ * @param app - The root React element to render.
198
+ * @param ymlPath - Path to the YAML layout file. Defaults to `<resourcePath>/<pluginName>.yaml`.
199
+ * @param rootNodeId - ID of the native container node in the YAML layout. Defaults to `'root'`.
200
+ * @param logger - Optional custom {@link Logger} to replace the default console logger.
201
+ */
202
+ function loadUI(app, ymlPath = null, rootNodeId = 'root', logger) {
203
+ instance_1.instance.rootNodeId = rootNodeId;
204
+ const _ymlPath = ymlPath ?? path.join(GorillaEngine.getResourcePath(), `${GorillaEngine.getPluginName()}.yaml`);
205
+ GorillaEngine.UI.loadUIfromYAML(_ymlPath);
206
+ const container = GorillaEngine.UI.getControlById(rootNodeId);
207
+ if (logger) {
208
+ instance_1.instance.log = logger;
209
+ }
210
+ render(React.createElement(Root_1.Root, { app: app }), container);
211
+ }
212
+ /**
213
+ * Creates a new native window and mounts a React tree into it.
214
+ *
215
+ * Use this instead of {@link loadUI} when no YAML layout is needed —
216
+ * the entire UI is built programmatically from React components.
217
+ *
218
+ * @param app - The root React element to render.
219
+ * @param width - Window width in pixels. Defaults to `1280`.
220
+ * @param height - Window height in pixels. Defaults to `760`.
221
+ * @param options - Optional settings:
222
+ * - `rootNodeId` – ID assigned to the root window (defaults to `"root"`).
223
+ * - `logger` – Custom {@link Logger} instance.
224
+ */
225
+ function createUI(app, width = 1280, height = 760, options) {
226
+ const container = new GorillaEngine.UI.Window({
227
+ id: options?.rootNodeId ?? 'root',
228
+ width,
229
+ height,
230
+ });
231
+ GorillaEngine.UI.createWindow(container);
232
+ if (options?.logger) {
233
+ instance_1.instance.log = options.logger;
234
+ }
235
+ render(React.createElement(Root_1.Root, { app: app }), container);
236
+ }
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR0VSZWFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9HRVJlYWN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJPQSx3QkF5QkM7QUFjRCx3QkFtQkM7QUFlRCw0QkFxQkM7QUF6VUQsNkNBQStCO0FBQy9CLGtFQUFvRDtBQUNwRCwyQ0FBNkI7QUFHN0IsMEVBQXlGO0FBRXpGLHlDQUE4QztBQUU5QyxpQ0FBOEI7QUFZOUIsTUFBTSxlQUFlLEdBQVcsRUFBRSxDQUFDO0FBQ25DLE1BQU0sZ0JBQWdCLEdBQVcsRUFBRSxDQUFDO0FBRXBDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsR0FlWjtJQUNGLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDYixpQkFBaUIsRUFBRSxJQUFJO0lBRXZCLGtCQUFrQjtRQUNoQixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCLEtBQVUsQ0FBQztJQUUzQixtQkFBbUI7UUFDakIsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBcUIsRUFBRSxLQUFVO1FBQ3BELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGNBQWMsQ0FDWixJQUFxQixFQUNyQixRQUFhLEVBQ2IscUJBQWlELEVBQ2pELG1CQUFnQyxFQUNoQyxjQUFtQjtRQUVuQixPQUFPLDBCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGtCQUFrQixDQUNoQixJQUFZLEVBQ1oscUJBQWlELEVBQ2pELFdBQXdCLEVBQ3hCLHNCQUF3QztRQUV4QyxPQUFPLDBCQUFnQixDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUFnQyxFQUFFLEtBQXVCO1FBQzFFLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxjQUFnQyxFQUFFLEtBQXVCO1FBQ25FLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELHVCQUF1QixDQUNyQixRQUEwQixFQUMxQixJQUFxQixFQUNyQixLQUFVLEVBQ1YsYUFBeUMsRUFDekMsV0FBd0I7UUFFeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsc0JBQXNCLENBQUMsU0FBcUMsRUFBRSxLQUF1QjtRQUNuRixTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsWUFBWSxDQUNWLFFBQTBCLEVBQzFCLElBQXFCLEVBQ3JCLFNBQWMsRUFDZCxTQUFjLEVBQ2QsY0FBbUI7UUFFbkIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkUsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixRQUFRLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsWUFBOEIsRUFBRSxPQUFlLEVBQUUsT0FBZTtRQUMvRSxZQUFZLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxXQUFXLENBQUMsY0FBZ0MsRUFBRSxLQUF1QjtRQUNuRSxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxTQUFxQyxFQUFFLEtBQXVCO1FBQ3JGLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBcUM7UUFDbEQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUNWLGNBQWdDLEVBQ2hDLEtBQXVCLEVBQ3ZCLFdBQTZCO1FBRTdCLGNBQWMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUEwQjtRQUMxQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsYUFBeUMsSUFBUyxDQUFDO0lBRXRFLGVBQWUsRUFBRSxVQUFVO0lBQzNCLGFBQWEsRUFBRSxZQUFZO0lBRTNCLHdCQUF3QixDQUFDLFNBQWlCLElBQVMsQ0FBQztJQUVwRCx3QkFBd0I7UUFDdEIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sRUFBRSxDQUFDLENBQUMsdUJBQXVCO0lBQ3BDLENBQUM7SUFFRCxtQkFBbUIsS0FBVSxDQUFDO0lBRTlCLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELDRCQUE0QjtRQUMxQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUEyQixJQUFTLENBQUM7SUFFM0QsbUJBQW1CLENBQUMsS0FBVTtRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx3QkFBd0IsS0FBVSxDQUFDO0lBRW5DLHVCQUF1QixLQUFVLENBQUM7SUFFbEMsa0JBQWtCLENBQUMsY0FBbUIsRUFBRSxTQUFjLElBQVMsQ0FBQztJQUVoRSxvQkFBb0IsQ0FBQyxjQUFtQjtRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUF1QixJQUFTLENBQUM7SUFFbkQsd0JBQXdCLENBQUMsU0FBaUMsSUFBUyxDQUFDO0lBRXBFLGdCQUFnQixDQUFDLEtBQXNCLEVBQUUsTUFBVztRQUNsRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBc0IsRUFBRSxNQUFXO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQixLQUFVLENBQUM7SUFFaEMsZUFBZSxDQUFDLEtBQXNCLEVBQUUsTUFBVyxJQUFTLENBQUM7SUFFN0Qsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9CQUFvQixFQUFFLElBQUk7SUFDMUIscUJBQXFCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFhLENBQVE7Q0FDakUsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFJLGVBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxZQUE2QixFQUFFLFNBQXdCLEVBQUUsUUFBYztJQUM1Riw2Q0FBNkM7SUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM5QixTQUFTLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQ25ELFNBQVMsRUFDVCxDQUFDLEVBQ0QsSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLENBQUMsS0FBYyxFQUFFLEVBQUU7WUFDakIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLEVBQ0QsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUNqQixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUMsRUFDRCxDQUFDLEtBQWMsRUFBRSxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxFQUNELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELDRCQUE0QjtJQUM1QixVQUFVLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixNQUFNLENBQ3BCLEdBQW9CLEVBQ3BCLFVBQXlCLElBQUksRUFDN0IsVUFBVSxHQUFHLE1BQU0sRUFDbkIsTUFBZTtJQUVmLG1CQUFRLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FDWixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLEVBQUUsR0FBRyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpHLGFBQWEsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTFDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTlELElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxtQkFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxvQkFBQyxXQUFJLElBQUMsR0FBRyxFQUFFLEdBQUcsR0FBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixRQUFRLENBQ3RCLEdBQW9CLEVBQ3BCLFFBQWdCLElBQUksRUFDcEIsU0FBaUIsR0FBRyxFQUNwQixPQUdDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUM1QyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsSUFBSSxNQUFNO1FBQ2pDLEtBQUs7UUFDTCxNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBQ0gsYUFBYSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFekMsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDcEIsbUJBQVEsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLG9CQUFDLFdBQUksSUFBQyxHQUFHLEVBQUUsR0FBRyxHQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEMsQ0FBQyJ9
package/dist/Root.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Top-level wrapper component used internally by the reconciler.
4
+ *
5
+ * Acts as the React root that renders the user-supplied `app` element
6
+ * into the Gorilla Engine native component tree. This is not intended
7
+ * to be used directly by consumers — it is created by {@link render},
8
+ * {@link loadUI}, and {@link createUI}.
9
+ */
10
+ export declare class Root extends React.Component {
11
+ props: {
12
+ app: any;
13
+ };
14
+ render(): React.JSX.Element;
15
+ }
package/dist/Root.js ADDED
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Root = void 0;
37
+ const React = __importStar(require("react"));
38
+ /**
39
+ * Top-level wrapper component used internally by the reconciler.
40
+ *
41
+ * Acts as the React root that renders the user-supplied `app` element
42
+ * into the Gorilla Engine native component tree. This is not intended
43
+ * to be used directly by consumers — it is created by {@link render},
44
+ * {@link loadUI}, and {@link createUI}.
45
+ */
46
+ class Root extends React.Component {
47
+ render() {
48
+ return (React.createElement(React.Fragment, null, this.props.app));
49
+ }
50
+ }
51
+ exports.Root = Root;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Sb290LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBOEI7QUFFOUI7Ozs7Ozs7R0FPRztBQUNILE1BQWEsSUFBSyxTQUFRLEtBQUssQ0FBQyxTQUFTO0lBSXZDLE1BQU07UUFDSixPQUFPLENBQ0wsMENBQ0csSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ2QsQ0FDSixDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBWEQsb0JBV0MifQ==
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Return type for {@link useInstrument}.
3
+ *
4
+ * Tuple of `[instrument, instrumentName, blob, setBlobPath]`.
5
+ */
6
+ type UseInstrumentReturnValue<T extends GorillaEngine.Instrument = GorillaEngine.Instrument> = [
7
+ T | null,
8
+ string,
9
+ GorillaEngine.Blob | null,
10
+ (blobPath: string) => void
11
+ ];
12
+ interface UseInstrumentOptions {
13
+ /** Whether to automatically call `GorillaEngine.setActiveInstrument()`. Defaults to `true`. */
14
+ setActive?: boolean;
15
+ }
16
+ /**
17
+ * Loads a Gorilla Engine blob and its first instrument, optionally setting it as the active instrument.
18
+ *
19
+ * Defaults to the plugin's primary blob. The blob and instrument are reloaded
20
+ * reactively when the blob path changes via the returned setter.
21
+ *
22
+ * @param overrideBlobPath - Custom path to a `.blob` file. Defaults to `${GorillaEngine.getPluginName()}_part1.blob` in the plugin's resource path.
23
+ * @param options - `{ setActive?: boolean }` — whether to call `setActiveInstrument`. Defaults to `true`.
24
+ * @returns A tuple of `[instrument, instrumentName, blob, setBlobPath]`.
25
+ */
26
+ export declare function useInstrument<T extends GorillaEngine.Instrument = GorillaEngine.Instrument>(overrideBlobPath?: string | null, options?: UseInstrumentOptions): UseInstrumentReturnValue<T>;
27
+ export {};
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.useInstrument = useInstrument;
37
+ const path = __importStar(require("path"));
38
+ const react_1 = require("react");
39
+ function loadBlobAndInstrument(blobPath, setActive) {
40
+ let blob = null;
41
+ let instrumentName = '';
42
+ let instrument = null;
43
+ // console.log('[useInstrument] Loading blob from:', blobPath);
44
+ try {
45
+ blob = GorillaEngine.loadBlob(blobPath);
46
+ }
47
+ catch (e) {
48
+ console.error('[useInstrument] Failed to load blob:', e);
49
+ return { blob, instrumentName, instrument };
50
+ }
51
+ const names = blob.getInstrumentNames();
52
+ instrumentName = names.length > 0 ? names[0] : '';
53
+ // console.log('[useInstrument] Instrument names in blob:', names);
54
+ if (!instrumentName) {
55
+ console.warn('[useInstrument] No instruments found in blob');
56
+ return { blob, instrumentName, instrument };
57
+ }
58
+ // console.log('[useInstrument] Loading instrument:', instrumentName);
59
+ try {
60
+ instrument = blob.loadInstrument(instrumentName);
61
+ }
62
+ catch (e) {
63
+ console.error('[useInstrument] Failed to load instrument:', e);
64
+ return { blob, instrumentName, instrument };
65
+ }
66
+ if (instrument && setActive) {
67
+ // console.log('[useInstrument] Setting active instrument:', instrumentName);
68
+ GorillaEngine.setActiveInstrument(instrument);
69
+ }
70
+ return { blob, instrumentName, instrument };
71
+ }
72
+ /**
73
+ * Loads a Gorilla Engine blob and its first instrument, optionally setting it as the active instrument.
74
+ *
75
+ * Defaults to the plugin's primary blob. The blob and instrument are reloaded
76
+ * reactively when the blob path changes via the returned setter.
77
+ *
78
+ * @param overrideBlobPath - Custom path to a `.blob` file. Defaults to `${GorillaEngine.getPluginName()}_part1.blob` in the plugin's resource path.
79
+ * @param options - `{ setActive?: boolean }` — whether to call `setActiveInstrument`. Defaults to `true`.
80
+ * @returns A tuple of `[instrument, instrumentName, blob, setBlobPath]`.
81
+ */
82
+ function useInstrument(overrideBlobPath = null, options = {}) {
83
+ const { setActive = true } = options;
84
+ const [blobPath, setBlobPath] = (0, react_1.useState)(overrideBlobPath ??
85
+ path.join(GorillaEngine.getResourcePath(), `${GorillaEngine.getPluginName()}_part1.blob`));
86
+ // console.log('[useInstrument] Render');
87
+ const [blobInstrumentState, setBlobInstrumentState] = (0, react_1.useState)(() => {
88
+ // console.log('[useInstrument] Initial state (useState initializer)');
89
+ return loadBlobAndInstrument(blobPath, setActive);
90
+ });
91
+ const isInitialMount = (0, react_1.useRef)(true);
92
+ (0, react_1.useEffect)(() => {
93
+ if (isInitialMount.current) {
94
+ // console.log('[useInstrument] useEffect skipped (initial mount)');
95
+ isInitialMount.current = false;
96
+ return;
97
+ }
98
+ // console.log('[useInstrument] useEffect triggered (blobPath changed)');
99
+ setBlobInstrumentState(loadBlobAndInstrument(blobPath, setActive));
100
+ }, [blobPath]);
101
+ // console.log('[useInstrument] Returning from hook');
102
+ return [
103
+ blobInstrumentState.instrument,
104
+ blobInstrumentState.instrumentName,
105
+ blobInstrumentState.blob,
106
+ setBlobPath,
107
+ ];
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlSW5zdHJ1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VJbnN0cnVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEVBLHNDQXFDQztBQS9HRCwyQ0FBNkI7QUFDN0IsaUNBQW9EO0FBeUJwRCxTQUFTLHFCQUFxQixDQUFDLFFBQWdCLEVBQUUsU0FBa0I7SUFDakUsSUFBSSxJQUFJLEdBQThCLElBQUksQ0FBQztJQUMzQyxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDeEIsSUFBSSxVQUFVLEdBQW9DLElBQUksQ0FBQztJQUV2RCwrREFBK0Q7SUFDL0QsSUFBSSxDQUFDO1FBQ0gsSUFBSSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUN4QyxjQUFjLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELG1FQUFtRTtJQUVuRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLFVBQVUsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM1Qiw2RUFBNkU7UUFDN0UsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixtQkFBa0MsSUFBSSxFQUN0QyxVQUFnQyxFQUFFO0lBRWxDLE1BQU0sRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXJDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsSUFBQSxnQkFBUSxFQUN0QyxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQzVGLENBQUM7SUFFRix5Q0FBeUM7SUFFekMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLEdBQUcsSUFBQSxnQkFBUSxFQUFzQixHQUFHLEVBQUU7UUFDdkYsdUVBQXVFO1FBQ3ZFLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxjQUFjLEdBQUcsSUFBQSxjQUFNLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEMsSUFBQSxpQkFBUyxFQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLG9FQUFvRTtZQUNwRSxjQUFjLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUNELHlFQUF5RTtRQUN6RSxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRWYsc0RBQXNEO0lBQ3RELE9BQU87UUFDTCxtQkFBbUIsQ0FBQyxVQUFzQjtRQUMxQyxtQkFBbUIsQ0FBQyxjQUFjO1FBQ2xDLG1CQUFtQixDQUFDLElBQUk7UUFDeEIsV0FBVztLQUNaLENBQUM7QUFDSixDQUFDIn0=