@kiberon-labs/behave-graph-flow 1.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/.fallowrc.json +16 -0
  2. package/.storybook/main.ts +32 -0
  3. package/.storybook/manager.ts +6 -0
  4. package/.storybook/preview.ts +64 -0
  5. package/.storybook/styles.css +16 -0
  6. package/.turbo/turbo-build.log +7 -0
  7. package/CHANGELOG.md +368 -0
  8. package/LICENSE +6 -0
  9. package/README.md +2 -2
  10. package/data/Polynomial.json +510 -0
  11. package/data/sequence.json +337 -0
  12. package/data/trigger-event.json +241 -0
  13. package/data/variable-change.json +210 -0
  14. package/dist/AnyControlImpl-Ds-CShIB.js +20 -0
  15. package/dist/AnyControlImpl-Ds-CShIB.js.map +1 -0
  16. package/dist/DocumentationBrowserPanelImpl-deZNzFX8.js +166 -0
  17. package/dist/DocumentationBrowserPanelImpl-deZNzFX8.js.map +1 -0
  18. package/dist/entry.css +4 -0
  19. package/dist/index.css +42 -0
  20. package/dist/index.css.map +1 -0
  21. package/dist/index.d.ts +3597 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +18009 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/noteImpl-KkrrWgJd.js +242 -0
  26. package/dist/noteImpl-KkrrWgJd.js.map +1 -0
  27. package/dist/styles.module-CvmpDkZj.css +3 -0
  28. package/dist/styles.module-CvmpDkZj.css.map +1 -0
  29. package/dist/styles.module-DZxg8aW9.js +271 -0
  30. package/dist/styles.module-DZxg8aW9.js.map +1 -0
  31. package/dist/useChangeNodeData-ChQGK7AI.js +23 -0
  32. package/dist/useChangeNodeData-ChQGK7AI.js.map +1 -0
  33. package/docs/notifications.md +246 -0
  34. package/docs/protocol.md +702 -0
  35. package/docs/specifics.md +191 -0
  36. package/package.json +82 -22
  37. package/postcss.config.ts +3 -4
  38. package/src/annotations/index.ts +32 -0
  39. package/src/components/FloatingToolbar/index.module.css +37 -0
  40. package/src/components/FloatingToolbar/index.tsx +256 -0
  41. package/src/components/Flow.tsx +287 -75
  42. package/src/components/contextMenus/DynamicContextMenu.tsx +85 -0
  43. package/src/components/contextMenus/NodePicker.module.css +274 -0
  44. package/src/components/contextMenus/NodePicker.tsx +481 -0
  45. package/src/components/contextMenus/edge.tsx +22 -0
  46. package/src/components/contextMenus/node.tsx +15 -0
  47. package/src/components/contextMenus/selection.tsx +11 -0
  48. package/src/components/controls/any/AnyControlImpl.tsx +14 -0
  49. package/src/components/controls/any/index.tsx +19 -0
  50. package/src/components/controls/boolean/index.tsx +13 -0
  51. package/src/components/controls/colorPicker/InputPopover.module.css +100 -0
  52. package/src/components/controls/colorPicker/InputPopover.tsx +31 -0
  53. package/src/components/controls/colorPicker/index.module.css +18 -0
  54. package/src/components/controls/colorPicker/index.tsx +61 -0
  55. package/src/components/controls/number/index.tsx +35 -0
  56. package/src/components/controls/string/index.tsx +16 -0
  57. package/src/components/edges/index.tsx +475 -0
  58. package/src/components/edges/offsetBezier.ts +134 -0
  59. package/src/components/hotKeys.tsx +20 -0
  60. package/src/components/layoutController/index.module.css +13 -0
  61. package/src/components/layoutController/index.tsx +140 -0
  62. package/src/components/layoutController/utils.ts +248 -0
  63. package/src/components/menubar/defaults.tsx +516 -0
  64. package/src/components/menubar/index.tsx +49 -0
  65. package/src/components/menubar/menuItem.module.css +31 -0
  66. package/src/components/menubar/menuItem.tsx +65 -0
  67. package/src/components/nodes/behave/Node.module.css +23 -0
  68. package/src/components/nodes/behave/Node.tsx +176 -0
  69. package/src/components/nodes/behave/NodeContainer.module.css +88 -0
  70. package/src/components/nodes/behave/NodeContainer.tsx +46 -0
  71. package/src/components/nodes/behave/index.tsx +14 -0
  72. package/src/components/nodes/group/index.tsx +109 -0
  73. package/src/components/nodes/wrapper/index.tsx +73 -0
  74. package/src/components/nodes/wrapper/styles.module.css +87 -0
  75. package/src/components/notifications/NotificationProvider.tsx +81 -0
  76. package/src/components/notifications/index.ts +2 -0
  77. package/src/components/notifications/utils.ts +71 -0
  78. package/src/components/panels/alignment/index.module.css +10 -0
  79. package/src/components/panels/alignment/index.tsx +244 -0
  80. package/src/components/panels/base/index.tsx +5 -0
  81. package/src/components/panels/base/styles.module.css +12 -0
  82. package/src/components/panels/common/PanelHeader.module.css +24 -0
  83. package/src/components/panels/common/PanelHeader.tsx +22 -0
  84. package/src/components/panels/common/SectionTitle.module.css +13 -0
  85. package/src/components/panels/common/SectionTitle.tsx +10 -0
  86. package/src/components/panels/events/EditEventPanel.tsx +324 -0
  87. package/src/components/panels/events/ManageEventsPanel.tsx +101 -0
  88. package/src/components/panels/events/index.tsx +23 -0
  89. package/src/components/panels/events/styles.module.css +178 -0
  90. package/src/components/panels/graphProperties/index.tsx +125 -0
  91. package/src/components/panels/history/index.tsx +92 -0
  92. package/src/components/panels/history/styles.module.css +97 -0
  93. package/src/components/panels/keymaps/index.module.css +68 -0
  94. package/src/components/panels/keymaps/index.tsx +166 -0
  95. package/src/components/panels/layers/index.tsx +245 -0
  96. package/src/components/panels/layers/styles.module.css +107 -0
  97. package/src/components/panels/legend/index.module.css +6 -0
  98. package/src/components/panels/legend/index.tsx +76 -0
  99. package/src/components/panels/logs/index.module.css +218 -0
  100. package/src/components/panels/logs/index.tsx +288 -0
  101. package/src/components/panels/nodeInputs/InputControl.tsx +63 -0
  102. package/src/components/panels/nodeInputs/InputsGroup.tsx +65 -0
  103. package/src/components/panels/nodeInputs/MultipleNodesView.tsx +37 -0
  104. package/src/components/panels/nodeInputs/NodeSettings.tsx +92 -0
  105. package/src/components/panels/nodeInputs/NodeTitleEditor.tsx +125 -0
  106. package/src/components/panels/nodeInputs/OutputsGroup.tsx +55 -0
  107. package/src/components/panels/nodeInputs/SocketGenerators.tsx +32 -0
  108. package/src/components/panels/nodeInputs/index.module.css +308 -0
  109. package/src/components/panels/nodeInputs/index.tsx +349 -0
  110. package/src/components/panels/nodeInputs/useNodeHandlers.ts +76 -0
  111. package/src/components/panels/nodeInputs/useNodeInputsData.ts +153 -0
  112. package/src/components/panels/nodePicker/index.tsx +115 -0
  113. package/src/components/panels/panel/index.module.css +66 -0
  114. package/src/components/panels/panel/index.tsx +88 -0
  115. package/src/components/panels/search/index.module.css +16 -0
  116. package/src/components/panels/search/index.tsx +215 -0
  117. package/src/components/panels/systemSettings/ConversionsSettings.tsx +203 -0
  118. package/src/components/panels/systemSettings/index.tsx +251 -0
  119. package/src/components/panels/systemSettings/styles.module.css +138 -0
  120. package/src/components/panels/traces/GridLines.tsx +38 -0
  121. package/src/components/panels/traces/TimeGrid.tsx +48 -0
  122. package/src/components/panels/traces/TraceLane.tsx +62 -0
  123. package/src/components/panels/traces/TraceTooltip.tsx +22 -0
  124. package/src/components/panels/traces/TracesHeader.tsx +56 -0
  125. package/src/components/panels/traces/index.module.css +159 -0
  126. package/src/components/panels/traces/index.tsx +298 -0
  127. package/src/components/panels/traces/types.ts +48 -0
  128. package/src/components/panels/traces/useDerivedSpans.ts +307 -0
  129. package/src/components/panels/traces/utils.ts +33 -0
  130. package/src/components/panels/variables/CreateVariableScreen.tsx +162 -0
  131. package/src/components/panels/variables/ManageVariablesScreen.tsx +147 -0
  132. package/src/components/panels/variables/index.tsx +125 -0
  133. package/src/components/panels/variables/styles.module.css +149 -0
  134. package/src/components/primitives/icon.module.css +45 -0
  135. package/src/components/primitives/icon.tsx +38 -0
  136. package/src/components/sockets/input/index.tsx +83 -0
  137. package/src/components/sockets/input/styles.module.css +26 -0
  138. package/src/components/sockets/output/index.tsx +68 -0
  139. package/src/components/sockets/output/styles.module.css +22 -0
  140. package/src/css/notes.css +135 -0
  141. package/src/css/prosemirror.css +57 -0
  142. package/src/css/rc-dock.css +212 -0
  143. package/src/css/rc-menu.css +101 -0
  144. package/src/css/themes/kiberon.css +127 -0
  145. package/src/css/vars.css +198 -0
  146. package/src/css/vscode-elements.css +124 -0
  147. package/src/entry.css +4 -0
  148. package/src/generators/CallSubgraphGenerator.tsx +136 -0
  149. package/src/generators/CustomEventOnTriggeredGenerator.tsx +85 -0
  150. package/src/generators/GraphBoundaryGenerator.module.css +32 -0
  151. package/src/generators/GraphBoundaryGenerator.tsx +193 -0
  152. package/src/generators/SequenceGenerator.tsx +104 -0
  153. package/src/generators/SwitchOnIntegerGenerator.tsx +256 -0
  154. package/src/generators/SwitchOnStringGenerator.tsx +263 -0
  155. package/src/generators/callSubgraphSync.ts +126 -0
  156. package/src/generators/registerDefaultGenerators.ts +55 -0
  157. package/src/generators/registerDefaults.ts +26 -0
  158. package/src/hooks/useBehaveGraphFlow.ts +17 -16
  159. package/src/hooks/useFlowHandlers.ts +154 -30
  160. package/src/hooks/useWasdPan.ts +210 -0
  161. package/src/index.css +134 -0
  162. package/src/index.ts +53 -18
  163. package/src/manifest/contributionRegistry.ts +93 -0
  164. package/src/manifest/index.ts +4 -0
  165. package/src/manifest/loadManifest.ts +82 -0
  166. package/src/manifest/manifestPlugin.ts +29 -0
  167. package/src/manifest/passthroughValueType.ts +40 -0
  168. package/src/plugin/alignment/index.ts +91 -0
  169. package/src/plugin/autosave/controller.ts +366 -0
  170. package/src/plugin/autosave/index.tsx +114 -0
  171. package/src/plugin/autosave/panel/BackupPanel.tsx +141 -0
  172. package/src/plugin/autosave/panel/index.tsx +1 -0
  173. package/src/plugin/autosave/panel/styles.module.css +56 -0
  174. package/src/plugin/autosave/settings.ts +65 -0
  175. package/src/plugin/autosave/storage.ts +147 -0
  176. package/src/plugin/docs/index.tsx +297 -0
  177. package/src/plugin/docs/panel/DocumentationBrowserPanelImpl.tsx +200 -0
  178. package/src/plugin/docs/panel/index.tsx +21 -0
  179. package/src/plugin/docs/panel/styles.module.css +174 -0
  180. package/src/plugin/graphrunner/actions.ts +326 -0
  181. package/src/plugin/graphrunner/buttons.tsx +95 -0
  182. package/src/plugin/graphrunner/client.ts +707 -0
  183. package/src/plugin/graphrunner/index.tsx +184 -0
  184. package/src/plugin/graphrunner/panel.tsx +386 -0
  185. package/src/plugin/graphrunner/runController.ts +283 -0
  186. package/src/plugin/graphrunner/runner.ts +187 -0
  187. package/src/plugin/graphrunner/session.ts +243 -0
  188. package/src/plugin/graphrunner/store.ts +196 -0
  189. package/src/plugin/graphrunner/styles.module.css +171 -0
  190. package/src/plugin/graphrunner/transport.ts +250 -0
  191. package/src/plugin/graphrunner/types.ts +693 -0
  192. package/src/plugin/graphrunner-local/execution-utils.ts +637 -0
  193. package/src/plugin/graphrunner-local/index.tsx +172 -0
  194. package/src/plugin/graphrunner-local/panel.tsx +187 -0
  195. package/src/plugin/graphrunner-local/store.ts +41 -0
  196. package/src/plugin/graphrunner-local/styles.module.css +82 -0
  197. package/src/plugin/graphrunner-local/transport.ts +1339 -0
  198. package/src/plugin/graphrunner-local/types.ts +10 -0
  199. package/src/plugin/graphrunner-webworker/graph-executor.worker.ts +635 -0
  200. package/src/plugin/graphrunner-webworker/index.tsx +140 -0
  201. package/src/plugin/graphrunner-webworker/panel.tsx +173 -0
  202. package/src/plugin/graphrunner-webworker/store.ts +98 -0
  203. package/src/plugin/graphrunner-webworker/worker-transport.ts +123 -0
  204. package/src/plugin/kitchen-sink/index.ts +38 -0
  205. package/src/plugin/layout/dagre.ts +131 -0
  206. package/src/plugin/layout/elk.ts +216 -0
  207. package/src/plugin/layout/index.ts +80 -0
  208. package/src/plugin/notes/FormatToolbar.tsx +200 -0
  209. package/src/plugin/notes/index.tsx +191 -0
  210. package/src/plugin/notes/nodeActions.ts +100 -0
  211. package/src/plugin/notes/note.tsx +20 -0
  212. package/src/plugin/notes/noteImpl.tsx +89 -0
  213. package/src/plugin/realtime/realtimeRunner.ts +624 -0
  214. package/src/specifics/CustomEventOnTriggeredSpecific.tsx +92 -0
  215. package/src/specifics/CustomEventTriggerSpecific.tsx +141 -0
  216. package/src/specifics/VariableGetSpecific.tsx +110 -0
  217. package/src/specifics/VariableSetSpecific.tsx +110 -0
  218. package/src/store/actions.tsx +698 -0
  219. package/src/store/commands.ts +278 -0
  220. package/src/store/contextMenu.ts +192 -0
  221. package/src/store/controls.tsx +62 -0
  222. package/src/store/conversions.ts +47 -0
  223. package/src/store/documentation.tsx +69 -0
  224. package/src/store/events.tsx +116 -0
  225. package/src/store/flow.tsx +230 -0
  226. package/src/store/graphMeta.ts +39 -0
  227. package/src/store/hotKeys.tsx +364 -0
  228. package/src/store/layers.ts +259 -0
  229. package/src/store/legend.tsx +76 -0
  230. package/src/store/logs.ts +28 -0
  231. package/src/store/menubar.ts +41 -0
  232. package/src/store/refs.ts +84 -0
  233. package/src/store/registry.ts +51 -0
  234. package/src/store/selection.ts +22 -0
  235. package/src/store/settings.ts +99 -0
  236. package/src/store/settingsSchema.ts +210 -0
  237. package/src/store/socketGenerator.tsx +54 -0
  238. package/src/store/specific.tsx +75 -0
  239. package/src/store/specs.tsx +35 -0
  240. package/src/store/tabs.ts +282 -0
  241. package/src/store/toolbar.tsx +45 -0
  242. package/src/store/traces.ts +240 -0
  243. package/src/store/variables.ts +37 -0
  244. package/src/system/graph.ts +131 -0
  245. package/src/system/graphSession.ts +172 -0
  246. package/src/system/index.ts +6 -0
  247. package/src/system/notifications.ts +111 -0
  248. package/src/system/persistence.ts +82 -0
  249. package/src/system/plugin.ts +55 -0
  250. package/src/system/provider.tsx +86 -0
  251. package/src/system/pubsub.ts +323 -0
  252. package/src/system/system.ts +653 -0
  253. package/src/system/tabLoader.tsx +303 -0
  254. package/src/system/undoRedo.ts +103 -0
  255. package/src/transformers/Uigraph.ts +61 -0
  256. package/src/transformers/behaveToFlow.ts +16 -4
  257. package/src/transformers/contract.ts +87 -0
  258. package/src/transformers/flowToBehave.ts +40 -12
  259. package/src/types/NodeMetadata.ts +27 -0
  260. package/src/types/graph.ts +49 -0
  261. package/src/types/nodes.ts +50 -0
  262. package/src/types.ts +18 -0
  263. package/src/util/autoConvert.ts +200 -0
  264. package/src/util/colors.ts +1 -29
  265. package/src/util/downloadJson.ts +18 -0
  266. package/src/util/extractNodeMetadata.ts +16 -0
  267. package/src/util/getPickerFilters.ts +1 -1
  268. package/src/util/isBehaveNode.ts +6 -0
  269. package/src/util/isValidConnection.ts +51 -17
  270. package/src/util/mergeSockets.ts +29 -0
  271. package/src/util/serializeVariables.ts +66 -0
  272. package/src/util/sockets.ts +43 -0
  273. package/stories/apex/layoutController/example-graph.worker.ts +39 -0
  274. package/stories/apex/layoutController/index.stories.tsx +48 -0
  275. package/stories/apex/layoutController/webworker.stories.tsx +103 -0
  276. package/stories/apex/menubar/menubar.stories.tsx +19 -0
  277. package/stories/components/colorpicker/index.stories.tsx +20 -0
  278. package/stories/components/contextMenus/edge.stories.tsx +32 -0
  279. package/stories/components/contextMenus/node.stories.tsx +26 -0
  280. package/stories/components/contextMenus/nodePicker.stories.tsx +115 -0
  281. package/stories/components/controls/any/index.stories.tsx +19 -0
  282. package/stories/components/controls/boolean/index.stories.tsx +19 -0
  283. package/stories/components/controls/colorPicker/index.stories.tsx +49 -0
  284. package/stories/components/controls/number/index.stories.tsx +19 -0
  285. package/stories/components/controls/string/index.stories.tsx +19 -0
  286. package/stories/components/nodes/behaveNode.stories.tsx +108 -0
  287. package/stories/components/panels/alignment.stories.tsx +24 -0
  288. package/stories/components/panels/events.stories.tsx +38 -0
  289. package/stories/components/panels/graphRunner.stories.tsx +317 -0
  290. package/stories/components/panels/history.stories.tsx +37 -0
  291. package/stories/components/panels/keymaps.stories.tsx +21 -0
  292. package/stories/components/panels/legend.stories.tsx +37 -0
  293. package/stories/components/panels/logs.stories.tsx +24 -0
  294. package/stories/components/panels/nodeInputs.stories.tsx +21 -0
  295. package/stories/components/panels/nodePicker.stories.tsx +37 -0
  296. package/stories/components/panels/panel.stories.tsx +39 -0
  297. package/stories/components/panels/search.stories.tsx +24 -0
  298. package/stories/components/panels/systemSettings.stories.tsx +26 -0
  299. package/stories/components/panels/traces.stories.tsx +225 -0
  300. package/stories/components/panels/variables.stories.tsx +24 -0
  301. package/stories/defaults/defaultStoryProvider.tsx +170 -0
  302. package/stories/defaults/systemGenerator.ts +43 -0
  303. package/stories/plugins/notes.stories.tsx +100 -0
  304. package/tests/autoConvert.test.ts +329 -0
  305. package/tests/autosavePlugin.test.ts +204 -0
  306. package/tests/callSubgraphSync.test.ts +148 -0
  307. package/tests/commandRegistry.test.ts +137 -0
  308. package/tests/components/edges/offsetBezier.test.ts +51 -0
  309. package/tests/components/layoutController/utils.test.ts +68 -0
  310. package/tests/components/panels/traces/utils.test.ts +52 -0
  311. package/tests/contract.test.ts +51 -0
  312. package/tests/contractSerialize.test.ts +62 -0
  313. package/tests/deriveSpans.test.ts +71 -0
  314. package/tests/flowToBehave.test.ts +27 -4
  315. package/tests/hotkeys.test.ts +79 -0
  316. package/tests/keepAliveLifecycle.test.ts +167 -0
  317. package/tests/loadManifest.test.ts +113 -0
  318. package/tests/noteMarkdown.test.ts +65 -0
  319. package/tests/notesPlugin.test.ts +162 -0
  320. package/tests/notifications.test.ts +87 -0
  321. package/tests/persistence.test.ts +51 -0
  322. package/tests/saveLoad.test.ts +373 -0
  323. package/tests/settings.test.ts +178 -0
  324. package/tests/traceStore.test.ts +46 -0
  325. package/tests/util/calculateNewEdge.test.ts +98 -0
  326. package/tests/util/getSocketsByNodeTypeAndHandleType.test.ts +31 -0
  327. package/tests/util/hasPositionMetaData.test.ts +33 -0
  328. package/tests/util/isBehaveNode.test.ts +22 -0
  329. package/tests/util/isHandleConnected.test.ts +37 -0
  330. package/tests/util/mergeSockets.test.ts +43 -0
  331. package/tests/visual/README.md +64 -0
  332. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-alignment-chromium-win32.png +0 -0
  333. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-conversation-chromium-win32.png +0 -0
  334. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-events-chromium-win32.png +0 -0
  335. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-history-chromium-win32.png +0 -0
  336. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-keymaps-chromium-win32.png +0 -0
  337. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-layers-chromium-win32.png +0 -0
  338. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-legend-chromium-win32.png +0 -0
  339. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-localGraphRunner-chromium-win32.png +0 -0
  340. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-logs-chromium-win32.png +0 -0
  341. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-nodeInputs-chromium-win32.png +0 -0
  342. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-nodePicker-chromium-win32.png +0 -0
  343. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-panel-chromium-win32.png +0 -0
  344. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-search-chromium-win32.png +0 -0
  345. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-systemSettings-chromium-win32.png +0 -0
  346. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-traces-chromium-win32.png +0 -0
  347. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-variables-chromium-win32.png +0 -0
  348. package/tests/visual/panels.visual.test.tsx +76 -0
  349. package/tests/wasdPan.test.ts +71 -0
  350. package/tsconfig.base.json +39 -0
  351. package/tsconfig.json +18 -59
  352. package/tsconfig.prod.json +23 -0
  353. package/tsdown.config.ts +15 -3
  354. package/typedoc.json +7 -7
  355. package/vite.config.js +7 -0
  356. package/vitest.config.ts +5 -2
  357. package/vitest.visual.config.ts +55 -0
  358. package/src/components/AutoSizeInput.tsx +0 -65
  359. package/src/components/Controls.tsx +0 -87
  360. package/src/components/InputSocket.tsx +0 -142
  361. package/src/components/Node.tsx +0 -68
  362. package/src/components/NodeContainer.tsx +0 -46
  363. package/src/components/NodePicker.tsx +0 -77
  364. package/src/components/OutputSocket.tsx +0 -58
  365. package/src/components/modals/ClearModal.tsx +0 -40
  366. package/src/components/modals/HelpModal.tsx +0 -36
  367. package/src/components/modals/LoadModal.tsx +0 -96
  368. package/src/components/modals/Modal.tsx +0 -64
  369. package/src/components/modals/SaveModal.tsx +0 -60
  370. package/src/hooks/useCustomNodeTypes.tsx +0 -31
  371. package/src/hooks/useGraphRunner.ts +0 -104
  372. package/src/hooks/useMergeMap.ts +0 -14
  373. package/src/hooks/useNodeSpecJson.ts +0 -20
  374. package/src/hooks/useQueriableDefinitions.ts +0 -22
  375. package/src/styles.css +0 -8
  376. package/tailwind.config.ts +0 -19
  377. package/tests/tsconfig.json +0 -10
  378. /package/src/{types.d.ts → types-declarations.d.ts} +0 -0
@@ -0,0 +1,256 @@
1
+ import React, { useCallback, useState } from 'react';
2
+ import {
3
+ VscodeButton,
4
+ VscodeTextfield,
5
+ VscodeSingleSelect,
6
+ VscodeOption
7
+ } from '@vscode-elements/react-elements';
8
+ import { Plus, Minus } from 'iconoir-react';
9
+
10
+ import { useGraph } from '@/system/provider';
11
+ import type { SocketGeneratorRenderProps } from '@/store/socketGenerator';
12
+ import type { NodeSpecJSON } from '@kiberon-labs/behave-graph/Graphs/IO/NodeSpecJSON';
13
+
14
+ const NAME = 'flow/switch/integer.socketGenerator';
15
+
16
+ export function getSwitchOnIntegerGenerator() {
17
+ return {
18
+ name: NAME,
19
+ check: (spec: NodeSpecJSON) => spec?.type === 'flow/switch/integer',
20
+ render: SwitchOnIntegerGenerator
21
+ };
22
+ }
23
+
24
+ const SwitchOnIntegerGenerator: React.FC<SocketGeneratorRenderProps> = ({
25
+ node
26
+ }) => {
27
+ const system = useGraph();
28
+
29
+ const numCases = node.data.configuration?.numCases ?? 0;
30
+ const caseLabels = node.data.configuration?.caseLabels ?? {};
31
+ const caseValues = node.data.configuration?.cases ?? {};
32
+
33
+ const [selectedCase, setSelectedCase] = useState<number>(1);
34
+
35
+ const updateNumCases = useCallback(
36
+ (newNumCases: number) => {
37
+ if (newNumCases < 0) return;
38
+
39
+ system.nodeStore.getState().setNodes((prev) =>
40
+ prev.map((n) => {
41
+ if (n.id !== node.id) return n;
42
+
43
+ // Preserve existing case values when changing numCases
44
+ const existingCases = n.data?.configuration?.cases ?? {};
45
+ const newCases: Record<string, bigint> = {};
46
+ for (let i = 1; i <= newNumCases; i++) {
47
+ const key = `${i}`;
48
+ newCases[key] = existingCases[key] ?? BigInt(i);
49
+ }
50
+
51
+ // Generate input sockets for each case
52
+ const inputs = [];
53
+ for (let i = 1; i <= newNumCases; i++) {
54
+ const key = `${i}`;
55
+ inputs.push({
56
+ name: n.data.configuration?.caseLabels?.[key] || key,
57
+ key,
58
+ valueType: 'integer'
59
+ });
60
+ }
61
+
62
+ // Generate output sockets for each case
63
+ const outputs = [];
64
+ for (let i = 1; i <= newNumCases; i++) {
65
+ const label = n.data.configuration?.caseLabels?.[`${i}`] || `${i}`;
66
+ outputs.push({
67
+ name: label,
68
+ key: `${i}`,
69
+ valueType: 'flow'
70
+ });
71
+ }
72
+ // Add default output
73
+ outputs.push({
74
+ name: 'default',
75
+ key: 'default',
76
+ valueType: 'flow'
77
+ });
78
+
79
+ return {
80
+ ...n,
81
+ data: {
82
+ ...n.data,
83
+ configuration: {
84
+ ...n.data.configuration,
85
+ numCases: newNumCases,
86
+ cases: newCases
87
+ },
88
+ dynamicPorts: {
89
+ ...n.data.dynamicPorts,
90
+ inputs,
91
+ outputs
92
+ }
93
+ }
94
+ };
95
+ })
96
+ );
97
+
98
+ if (selectedCase > newNumCases && newNumCases > 0) {
99
+ setSelectedCase(newNumCases);
100
+ }
101
+ },
102
+ [node.id, system, selectedCase]
103
+ );
104
+
105
+ const updateCaseValue = useCallback(
106
+ (caseIndex: number, value: string) => {
107
+ const intValue =
108
+ value === ''
109
+ ? BigInt(caseIndex)
110
+ : BigInt(parseInt(value, 10) || caseIndex);
111
+ system.nodeStore.getState().setNodes((prev) =>
112
+ prev.map((n: any) => {
113
+ if (n.id !== node.id) return n;
114
+
115
+ const updatedCases = {
116
+ ...n.data?.configuration?.cases,
117
+ [`${caseIndex}`]: intValue
118
+ };
119
+
120
+ const updatedLabels = {
121
+ ...n.data?.configuration?.caseLabels,
122
+ [`${caseIndex}`]: value || `${caseIndex}`
123
+ };
124
+
125
+ // Update input sockets
126
+ const numCases = n.data?.configuration?.numCases ?? 0;
127
+ const inputs = [];
128
+ for (let i = 1; i <= numCases; i++) {
129
+ const key = `${i}`;
130
+ inputs.push({
131
+ name: updatedLabels[key] || key,
132
+ key,
133
+ valueType: 'integer'
134
+ });
135
+ }
136
+
137
+ // Regenerate output sockets with updated labels
138
+ const outputs = [];
139
+ for (let i = 1; i <= numCases; i++) {
140
+ const label = updatedLabels[`${i}`] || `${i}`;
141
+ outputs.push({
142
+ name: label,
143
+ key: `${i}`,
144
+ valueType: 'flow'
145
+ });
146
+ }
147
+ outputs.push({
148
+ name: 'default',
149
+ key: 'default',
150
+ valueType: 'flow'
151
+ });
152
+
153
+ return {
154
+ ...n,
155
+ data: {
156
+ ...n.data,
157
+ dynamicPorts: {
158
+ ...n.data?.dynamicPorts,
159
+ inputs,
160
+ outputs
161
+ },
162
+ configuration: {
163
+ ...n.data?.configuration,
164
+ cases: updatedCases,
165
+ caseLabels: updatedLabels
166
+ }
167
+ }
168
+ };
169
+ })
170
+ );
171
+ },
172
+ [node.id, system]
173
+ );
174
+
175
+ const addCase = useCallback(() => {
176
+ const newCount = numCases + 1;
177
+ updateNumCases(newCount);
178
+ setSelectedCase(newCount);
179
+ }, [numCases, updateNumCases]);
180
+
181
+ const removeCase = useCallback(() => {
182
+ updateNumCases(Math.max(0, numCases - 1));
183
+ }, [numCases, updateNumCases]);
184
+
185
+ return (
186
+ <div
187
+ style={{
188
+ display: 'flex',
189
+ flexDirection: 'column',
190
+ gap: 8
191
+ }}
192
+ >
193
+ <div
194
+ style={{
195
+ display: 'flex',
196
+ alignItems: 'center',
197
+ justifyContent: 'space-between',
198
+ marginBottom: 4
199
+ }}
200
+ >
201
+ <div style={{ fontSize: 12, opacity: 0.9 }}>Cases: {numCases}</div>
202
+ </div>
203
+
204
+ {numCases > 0 && (
205
+ <>
206
+ <div style={{ fontSize: 11, opacity: 0.8, marginBottom: -4 }}>
207
+ Edit Case
208
+ </div>
209
+ <VscodeSingleSelect
210
+ value={String(selectedCase)}
211
+ onChange={(e: any) => setSelectedCase(Number(e.target.value))}
212
+ >
213
+ {Array.from({ length: numCases }, (_, i) => i + 1).map(
214
+ (caseIndex) => (
215
+ <VscodeOption key={caseIndex} value={String(caseIndex)}>
216
+ {caseLabels[`${caseIndex}`] || `Case ${caseIndex}`}
217
+ </VscodeOption>
218
+ )
219
+ )}
220
+ </VscodeSingleSelect>
221
+
222
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
223
+ <label style={{ fontSize: 11, opacity: 0.8 }}>Match Value</label>
224
+ <VscodeTextfield
225
+ type="number"
226
+ value={
227
+ caseValues[`${selectedCase}`] !== undefined
228
+ ? String(caseValues[`${selectedCase}`])
229
+ : ''
230
+ }
231
+ onInput={(e: any) =>
232
+ updateCaseValue(selectedCase, e.target.value)
233
+ }
234
+ placeholder={`Integer value for case ${selectedCase}`}
235
+ />
236
+ </div>
237
+ </>
238
+ )}
239
+
240
+ <div style={{ display: 'flex', gap: 4, marginTop: 4 }}>
241
+ <VscodeButton onClick={addCase} title="Add Case" iconOnly>
242
+ <Plus />
243
+ </VscodeButton>
244
+ <VscodeButton
245
+ onClick={removeCase}
246
+ secondary
247
+ iconOnly
248
+ title="Remove Case"
249
+ disabled={numCases === 0}
250
+ >
251
+ <Minus />
252
+ </VscodeButton>
253
+ </div>
254
+ </div>
255
+ );
256
+ };
@@ -0,0 +1,263 @@
1
+ import React, { useCallback, useState } from 'react';
2
+ import {
3
+ VscodeButton,
4
+ VscodeTextfield,
5
+ VscodeSingleSelect,
6
+ VscodeOption
7
+ } from '@vscode-elements/react-elements';
8
+ import { Plus, Minus } from 'iconoir-react';
9
+
10
+ import { useGraph } from '@/system/provider';
11
+ import type { SocketGeneratorRenderProps } from '@/store/socketGenerator';
12
+ import type { NodeSpecJSON } from '@kiberon-labs/behave-graph/Graphs/IO/NodeSpecJSON';
13
+
14
+ const NAME = 'flow/switch/string.socketGenerator';
15
+
16
+ export function getSwitchOnStringGenerator() {
17
+ return {
18
+ name: NAME,
19
+ check: (spec: NodeSpecJSON) => spec?.type === 'flow/switch/string',
20
+ render: SwitchOnStringGenerator
21
+ };
22
+ }
23
+
24
+ const SwitchOnStringGenerator: React.FC<SocketGeneratorRenderProps> = ({
25
+ node
26
+ }) => {
27
+ const system = useGraph();
28
+
29
+ const numCases = node.data.configuration?.numCases ?? 0;
30
+ const caseLabels = node.data.configuration?.caseLabels ?? {};
31
+ const caseValues = node.data.configuration?.cases ?? {};
32
+
33
+ const [selectedCase, setSelectedCase] = useState<number>(1);
34
+
35
+ const updateNumCases = useCallback(
36
+ (newNumCases: number) => {
37
+ if (newNumCases < 0) return;
38
+
39
+ system.nodeStore.getState().setNodes((prev) =>
40
+ prev.map((n: any) => {
41
+ if (n.id !== node.id) return n;
42
+
43
+ // Preserve existing case values when changing numCases
44
+ const existingCases = n.data?.configuration?.cases ?? {};
45
+ const newCases: Record<string, string> = {};
46
+ for (let i = 1; i <= newNumCases; i++) {
47
+ const key = `${i}`;
48
+ newCases[key] = existingCases[key] ?? `case${i}`;
49
+ }
50
+
51
+ // Generate input sockets for each case
52
+ const inputs = [];
53
+ for (let i = 1; i <= newNumCases; i++) {
54
+ const key = `${i}`;
55
+ inputs.push({
56
+ name: n.data?.configuration?.caseLabels?.[key] || `Case ${i}`,
57
+ key,
58
+ valueType: 'string'
59
+ });
60
+ }
61
+
62
+ // Generate output sockets for each case
63
+ const outputs = [];
64
+ for (let i = 1; i <= newNumCases; i++) {
65
+ const label =
66
+ n.data?.configuration?.caseLabels?.[`${i}`] || `Case ${i}`;
67
+ outputs.push({
68
+ name: label,
69
+ key: `${i}`,
70
+ valueType: 'flow'
71
+ });
72
+ }
73
+ // Add default output
74
+ outputs.push({
75
+ name: 'default',
76
+ key: 'default',
77
+ valueType: 'flow'
78
+ });
79
+
80
+ return {
81
+ ...n,
82
+ data: {
83
+ ...n.data,
84
+ configuration: {
85
+ ...n.data?.configuration,
86
+ numCases: newNumCases,
87
+ cases: newCases
88
+ },
89
+ dynamicPorts: {
90
+ ...n.data?.dynamicPorts,
91
+ inputs,
92
+ outputs
93
+ }
94
+ }
95
+ };
96
+ })
97
+ );
98
+
99
+ if (selectedCase > newNumCases && newNumCases > 0) {
100
+ setSelectedCase(newNumCases);
101
+ }
102
+ },
103
+ [node.id, system, selectedCase]
104
+ );
105
+
106
+ const updateCaseValue = useCallback(
107
+ (caseIndex: number, value: string) => {
108
+ system.nodeStore.getState().setNodes((prev) =>
109
+ prev.map((n: any) => {
110
+ if (n.id !== node.id) return n;
111
+
112
+ const updatedCases = {
113
+ ...n.data?.configuration?.cases,
114
+ [`${caseIndex}`]: value
115
+ };
116
+
117
+ const updatedLabels = {
118
+ ...n.data?.configuration?.caseLabels,
119
+ [`${caseIndex}`]: value || `Case ${caseIndex}`
120
+ };
121
+
122
+ // Update input sockets
123
+ const numCases = n.data?.configuration?.numCases ?? 0;
124
+ const inputs = [];
125
+ for (let i = 1; i <= numCases; i++) {
126
+ const key = `${i}`;
127
+ inputs.push({
128
+ name: updatedLabels[key] || `Case ${i}`,
129
+ key,
130
+ valueType: 'string'
131
+ });
132
+ }
133
+
134
+ // Regenerate output sockets with updated labels
135
+ const outputs = [];
136
+ for (let i = 1; i <= numCases; i++) {
137
+ const label = updatedLabels[`${i}`] || `Case ${i}`;
138
+ outputs.push({
139
+ name: label,
140
+ key: `${i}`,
141
+ valueType: 'flow'
142
+ });
143
+ }
144
+ outputs.push({
145
+ name: 'default',
146
+ key: 'default',
147
+ valueType: 'flow'
148
+ });
149
+
150
+ return {
151
+ ...n,
152
+ data: {
153
+ ...n.data,
154
+ dynamicPorts: {
155
+ ...n.data?.dynamicPorts,
156
+ inputs,
157
+ outputs
158
+ },
159
+ configuration: {
160
+ ...n.data?.configuration,
161
+ cases: updatedCases,
162
+ caseLabels: updatedLabels
163
+ }
164
+ }
165
+ };
166
+ })
167
+ );
168
+ },
169
+ [node.id, system]
170
+ );
171
+
172
+ const addCase = useCallback(() => {
173
+ const newCount = numCases + 1;
174
+ updateNumCases(newCount);
175
+ setSelectedCase(newCount);
176
+ }, [numCases, updateNumCases]);
177
+
178
+ const removeCase = useCallback(() => {
179
+ updateNumCases(Math.max(0, numCases - 1));
180
+ }, [numCases, updateNumCases]);
181
+
182
+ return (
183
+ <div
184
+ style={{
185
+ display: 'flex',
186
+ flexDirection: 'column',
187
+ gap: 8
188
+ }}
189
+ >
190
+ <div
191
+ style={{
192
+ display: 'flex',
193
+ alignItems: 'center',
194
+ justifyContent: 'space-between',
195
+ marginBottom: 4
196
+ }}
197
+ >
198
+ <div style={{ fontSize: 12, opacity: 0.9 }}>Cases: {numCases}</div>
199
+ </div>
200
+
201
+ {numCases > 0 && (
202
+ <>
203
+ <div style={{ fontSize: 11, opacity: 0.8, marginBottom: -4 }}>
204
+ Edit Case
205
+ </div>
206
+ <VscodeSingleSelect
207
+ value={String(selectedCase)}
208
+ onChange={(e: any) => setSelectedCase(Number(e.target.value))}
209
+ >
210
+ {Array.from({ length: numCases }, (_, i) => i + 1).map(
211
+ (caseIndex) => (
212
+ <VscodeOption key={caseIndex} value={String(caseIndex)}>
213
+ {caseLabels[`${caseIndex}`] || `Case ${caseIndex}`}
214
+ </VscodeOption>
215
+ )
216
+ )}
217
+ </VscodeSingleSelect>
218
+
219
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
220
+ <label style={{ fontSize: 11, opacity: 0.8 }}>Match Value</label>
221
+ <VscodeTextfield
222
+ value={caseValues[`${selectedCase}`] ?? ''}
223
+ onInput={(e: any) =>
224
+ updateCaseValue(selectedCase, e.target.value)
225
+ }
226
+ placeholder={`String value for case ${selectedCase}`}
227
+ />
228
+ </div>
229
+ </>
230
+ )}
231
+
232
+ <div style={{ display: 'flex', gap: 4, marginTop: 4 }}>
233
+ <VscodeButton
234
+ onClick={addCase}
235
+ style={{
236
+ flex: 1,
237
+ display: 'flex',
238
+ alignItems: 'center',
239
+ justifyContent: 'center',
240
+ gap: 4
241
+ }}
242
+ >
243
+ <Plus width={16} height={16} />
244
+ Add Case
245
+ </VscodeButton>
246
+ <VscodeButton
247
+ onClick={removeCase}
248
+ disabled={numCases === 0}
249
+ style={{
250
+ flex: 1,
251
+ display: 'flex',
252
+ alignItems: 'center',
253
+ justifyContent: 'center',
254
+ gap: 4
255
+ }}
256
+ >
257
+ <Minus width={16} height={16} />
258
+ Remove
259
+ </VscodeButton>
260
+ </div>
261
+ </div>
262
+ );
263
+ };
@@ -0,0 +1,126 @@
1
+ import type { System } from '@/system/system';
2
+ import type { GraphSession } from '@/system/graphSession';
3
+ import type { IBehaveNode } from '@/types/nodes';
4
+ import {
5
+ CALL_SUBGRAPH_TYPE,
6
+ contractToParams,
7
+ deriveContract,
8
+ paramsToSockets,
9
+ type ContractParam
10
+ } from '@/transformers/contract';
11
+
12
+ /**
13
+ * Stable string key for a session's contract (its graph/input + graph/output
14
+ * params). Used to detect *contract* changes and ignore unrelated node edits
15
+ * (e.g. dragging), so we only repropagate when the boundary actually changes.
16
+ */
17
+ const contractKey = (session: GraphSession): string =>
18
+ JSON.stringify(deriveContract(session.nodeStore.getState().nodes));
19
+
20
+ /**
21
+ * Reconcile every Call Subgraph node in every open graph with the *current*
22
+ * contract of the subgraph it references. Idempotent: a node is only rewritten
23
+ * when its stored contract/ports actually differ, so this converges and never
24
+ * loops (rewriting a call node does not change its host graph's contract).
25
+ */
26
+ const resyncAllCallNodes = (editor: System): void => {
27
+ const sessions = editor.activeGraph.getState().sessions;
28
+
29
+ for (const target of Object.values(sessions)) {
30
+ let mutated = false;
31
+
32
+ const nextNodes = target.nodeStore.getState().nodes.map((node) => {
33
+ if (node.data?.type !== CALL_SUBGRAPH_TYPE) return node;
34
+
35
+ const subgraphId = String(node.data?.configuration?.subgraphId ?? '');
36
+ const subgraph = subgraphId ? sessions[subgraphId] : undefined;
37
+ // Referenced graph not open (e.g. its tab was closed): leave the last
38
+ // known contract in place rather than wiping the node's ports.
39
+ if (!subgraph) return node;
40
+
41
+ const contract = deriveContract(subgraph.nodeStore.getState().nodes);
42
+ const inputs: ContractParam[] = contractToParams(contract.graphInputs);
43
+ const outputs: ContractParam[] = contractToParams(contract.graphOutputs);
44
+ const inputSockets = paramsToSockets(inputs);
45
+ const outputSockets = paramsToSockets(outputs);
46
+
47
+ const currentConfig = {
48
+ inputs: node.data?.configuration?.inputs ?? [],
49
+ outputs: node.data?.configuration?.outputs ?? []
50
+ };
51
+ const currentPorts = {
52
+ inputs: node.data?.dynamicPorts?.inputs ?? [],
53
+ outputs: node.data?.dynamicPorts?.outputs ?? []
54
+ };
55
+
56
+ if (
57
+ JSON.stringify(currentConfig) === JSON.stringify({ inputs, outputs }) &&
58
+ JSON.stringify(currentPorts) ===
59
+ JSON.stringify({ inputs: inputSockets, outputs: outputSockets })
60
+ ) {
61
+ return node;
62
+ }
63
+
64
+ mutated = true;
65
+ return {
66
+ ...node,
67
+ data: {
68
+ ...node.data,
69
+ configuration: {
70
+ ...node.data?.configuration,
71
+ inputs,
72
+ outputs
73
+ },
74
+ dynamicPorts: {
75
+ ...node.data?.dynamicPorts,
76
+ inputs: inputSockets,
77
+ outputs: outputSockets
78
+ }
79
+ }
80
+ } as IBehaveNode;
81
+ });
82
+
83
+ if (mutated) target.nodeStore.getState().setNodes(() => nextNodes);
84
+ }
85
+ };
86
+
87
+ /**
88
+ * Keep Call Subgraph nodes live with the graphs they reference. Without this a
89
+ * call node only captures the subgraph's contract at selection time; editing the
90
+ * subgraph's inputs/outputs afterwards would leave callers stale.
91
+ *
92
+ * Implemented as an editor session extension: every open graph (existing and
93
+ * future) watches its own contract, and when it changes we repropagate to all
94
+ * call nodes referencing it across every graph. Returns a disposer.
95
+ */
96
+ export function setupCallSubgraphSync(editor: System): () => void {
97
+ const unsubscribes = new Map<string, () => void>();
98
+
99
+ const watch = (session: GraphSession) => {
100
+ if (unsubscribes.has(session.id)) return;
101
+
102
+ let last = contractKey(session);
103
+ const unsub = session.nodeStore.subscribe(() => {
104
+ const next = contractKey(session);
105
+ if (next === last) return; // ignore non-contract edits (drags, etc.)
106
+ last = next;
107
+ resyncAllCallNodes(editor);
108
+ });
109
+
110
+ unsubscribes.set(session.id, unsub);
111
+ session.onDispose(() => {
112
+ unsubscribes.get(session.id)?.();
113
+ unsubscribes.delete(session.id);
114
+ });
115
+ };
116
+
117
+ const unregister = editor.registerSessionExtension(watch);
118
+ // Reconcile graphs already open (e.g. a project loaded from disk) once.
119
+ resyncAllCallNodes(editor);
120
+
121
+ return () => {
122
+ unregister();
123
+ for (const unsub of unsubscribes.values()) unsub();
124
+ unsubscribes.clear();
125
+ };
126
+ }
@@ -0,0 +1,55 @@
1
+ import type { System } from '@/system/system';
2
+ import { getSwitchOnStringGenerator } from '../generators/SwitchOnStringGenerator';
3
+ import { getSwitchOnIntegerGenerator } from '../generators/SwitchOnIntegerGenerator';
4
+ import { getCustomEventOnTriggeredGenerator } from '../generators/CustomEventOnTriggeredGenerator';
5
+ import { getSequenceGenerator } from '../generators/SequenceGenerator';
6
+ import {
7
+ getGraphInputGenerator,
8
+ getGraphOutputGenerator
9
+ } from '../generators/GraphBoundaryGenerator';
10
+ import { getCallSubgraphGenerator } from '../generators/CallSubgraphGenerator';
11
+
12
+ export function registerDefaultSocketGenerators(system: System): () => void {
13
+ const store = system.socketGeneratorStore.getState();
14
+
15
+ const switchOnString = getSwitchOnStringGenerator();
16
+ store.registerGenerator(switchOnString);
17
+
18
+ const switchOnInteger = getSwitchOnIntegerGenerator();
19
+ store.registerGenerator(switchOnInteger);
20
+
21
+ const customEventOnTriggered = getCustomEventOnTriggeredGenerator();
22
+ store.registerGenerator(customEventOnTriggered);
23
+
24
+ const sequence = getSequenceGenerator();
25
+ store.registerGenerator(sequence);
26
+
27
+ const graphInput = getGraphInputGenerator();
28
+ store.registerGenerator(graphInput);
29
+
30
+ const graphOutput = getGraphOutputGenerator();
31
+ store.registerGenerator(graphOutput);
32
+
33
+ const callSubgraph = getCallSubgraphGenerator();
34
+ store.registerGenerator(callSubgraph);
35
+
36
+ return () => {
37
+ system.socketGeneratorStore
38
+ .getState()
39
+ .unregisterGenerator(switchOnString.name);
40
+ system.socketGeneratorStore
41
+ .getState()
42
+ .unregisterGenerator(switchOnInteger.name);
43
+ system.socketGeneratorStore
44
+ .getState()
45
+ .unregisterGenerator(customEventOnTriggered.name);
46
+ system.socketGeneratorStore.getState().unregisterGenerator(sequence.name);
47
+ system.socketGeneratorStore.getState().unregisterGenerator(graphInput.name);
48
+ system.socketGeneratorStore
49
+ .getState()
50
+ .unregisterGenerator(graphOutput.name);
51
+ system.socketGeneratorStore
52
+ .getState()
53
+ .unregisterGenerator(callSubgraph.name);
54
+ };
55
+ }