@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,134 @@
1
+ import { Position, getBezierPath } from 'reactflow';
2
+ import type { EdgeProps } from 'reactflow';
3
+
4
+ export type BetterBezierEdgeProps<T = unknown> = EdgeProps<T> & {
5
+ pathOptions?: {
6
+ offset?: number;
7
+ };
8
+ };
9
+
10
+ export interface GetBetterBezierPathParams {
11
+ sourceX: number;
12
+ sourceY: number;
13
+ sourcePosition?: Position;
14
+ targetX: number;
15
+ targetY: number;
16
+ targetPosition?: Position;
17
+ offset?: number;
18
+ }
19
+
20
+ interface GetControlParams {
21
+ pos: Position;
22
+ x1: number;
23
+ y1: number;
24
+ x2: number;
25
+ y2: number;
26
+ }
27
+
28
+ function getControl({
29
+ pos,
30
+ x1,
31
+ y1,
32
+ x2,
33
+ y2
34
+ }: GetControlParams): [number, number] {
35
+ if (pos === Position.Left || pos === Position.Right) {
36
+ return [0.5 * (x1 + x2), y1];
37
+ }
38
+
39
+ return [x1, 0.5 * (y1 + y2)];
40
+ }
41
+
42
+ export function getBetterBezierPath({
43
+ sourceX,
44
+ sourceY,
45
+ sourcePosition = Position.Bottom,
46
+ targetX,
47
+ targetY,
48
+ targetPosition = Position.Top,
49
+ offset = 75
50
+ }: GetBetterBezierPathParams): [
51
+ path: string,
52
+ labelX: number,
53
+ labelY: number,
54
+ offsetX: number,
55
+ offsetY: number
56
+ ] {
57
+ let [sourceControlX, sourceControlY] = getControl({
58
+ pos: sourcePosition,
59
+ x1: sourceX,
60
+ y1: sourceY,
61
+ x2: targetX,
62
+ y2: targetY
63
+ });
64
+ let [targetControlX, targetControlY] = getControl({
65
+ pos: targetPosition,
66
+ x1: targetX,
67
+ y1: targetY,
68
+ x2: sourceX,
69
+ y2: sourceY
70
+ });
71
+
72
+ if (offset) {
73
+ switch (sourcePosition) {
74
+ case Position.Top:
75
+ sourceControlX = sourceX;
76
+ sourceControlY = sourceY - offset;
77
+ break;
78
+ case Position.Bottom:
79
+ sourceControlX = sourceX;
80
+ sourceControlY = sourceY + offset;
81
+ break;
82
+ case Position.Left:
83
+ sourceControlX = sourceX - offset;
84
+ sourceControlY = sourceY;
85
+ break;
86
+ case Position.Right:
87
+ sourceControlX = sourceX + offset;
88
+ sourceControlY = sourceY;
89
+ break;
90
+ default:
91
+ sourceControlX = sourceX + offset;
92
+ sourceControlY = sourceY;
93
+ }
94
+
95
+ switch (targetPosition) {
96
+ case Position.Top:
97
+ targetControlX = targetX;
98
+ targetControlY = targetY - offset;
99
+ break;
100
+ case Position.Bottom:
101
+ targetControlX = targetX;
102
+ targetControlY = targetY + offset;
103
+ break;
104
+ case Position.Left:
105
+ targetControlX = targetX - offset;
106
+ targetControlY = targetY;
107
+ break;
108
+ case Position.Right:
109
+ targetControlX = targetX + offset;
110
+ targetControlY = targetY;
111
+ break;
112
+ default:
113
+ targetControlX = targetX - offset;
114
+ targetControlY = targetY;
115
+ }
116
+ }
117
+
118
+ const [, labelX, labelY, offsetX, offsetY] = getBezierPath({
119
+ sourceX,
120
+ sourceY,
121
+ targetX,
122
+ targetY,
123
+ sourcePosition,
124
+ targetPosition
125
+ });
126
+
127
+ return [
128
+ `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,
129
+ labelX,
130
+ labelY,
131
+ offsetX,
132
+ offsetY
133
+ ];
134
+ }
@@ -0,0 +1,20 @@
1
+ import { HotKeys as HotKeysComp } from 'react-hotkeys';
2
+ import { useSystem } from '@/system';
3
+ import { useStore } from 'zustand';
4
+
5
+ export const HotKeys = ({ children }: { children: React.ReactNode }) => {
6
+ const sys = useSystem();
7
+ const keyMap = useStore(sys.hotKeyStore, (x) => x.keymap);
8
+ const handlers = useStore(sys.hotKeyStore, (x) => x.handlers);
9
+
10
+ return (
11
+ <HotKeysComp
12
+ keyMap={keyMap}
13
+ handlers={handlers}
14
+ allowChanges={true}
15
+ style={{ height: '100%', width: '100%' }}
16
+ >
17
+ {children}
18
+ </HotKeysComp>
19
+ );
20
+ };
@@ -0,0 +1,13 @@
1
+ .panelExtra {
2
+ display: flex;
3
+ align-items: center;
4
+ gap: 4px;
5
+ padding: 0 4px;
6
+ }
7
+
8
+ .root {
9
+ display: flex;
10
+ flex-direction: column;
11
+ height: 100%;
12
+ overflow: hidden;
13
+ }
@@ -0,0 +1,140 @@
1
+ import type { LayoutBase, TabBase, TabData, TabGroup } from 'rc-dock';
2
+ import { DockLayout } from 'rc-dock';
3
+ import React, { useCallback } from 'react';
4
+ import { VscodeButton } from '@vscode-elements/react-elements';
5
+ import { Reduce, Maximize, Xmark } from 'iconoir-react';
6
+ import { useSystem } from '@/system/provider.js';
7
+ import { MenuBar } from '../menubar';
8
+ import { useStore } from 'zustand';
9
+ import {
10
+ findGraphPanel,
11
+ collectGraphSessionIds,
12
+ isGraphTabId,
13
+ sessionIdFromTabId
14
+ } from './utils';
15
+
16
+ import styles from './index.module.css';
17
+ import { NotificationProvider } from '../notifications';
18
+
19
+ const groups: Record<string, TabGroup> = {
20
+ default: {
21
+ animated: false,
22
+ floatable: true
23
+ },
24
+ headless: {
25
+ floatable: true,
26
+ maximizable: true,
27
+ disableDock: true,
28
+ panelExtra: () => <></>
29
+ },
30
+ popout: {
31
+ animated: false,
32
+ floatable: true,
33
+
34
+ panelExtra: (panelData, context) => {
35
+ const buttons: React.ReactElement[] = [];
36
+ buttons.push(
37
+ <VscodeButton
38
+ secondary
39
+ iconOnly
40
+ key="close"
41
+ title="Close"
42
+ onClick={() => context.dockMove(panelData, null, 'remove')}
43
+ >
44
+ <Xmark />
45
+ </VscodeButton>
46
+ );
47
+ return <div className={styles.panelExtra}>{buttons}</div>;
48
+ }
49
+ },
50
+ /**
51
+ * Note that the graph has a huge issue when ran in a popout window, as such we disable it for now
52
+ */
53
+ graph: {
54
+ animated: false,
55
+ floatable: true,
56
+ panelExtra: (panelData, context) => {
57
+ const buttons: React.ReactElement[] = [];
58
+ if (panelData?.parent?.mode !== 'window') {
59
+ const maxxed = panelData?.parent?.mode === 'maximize';
60
+ buttons.push(
61
+ <VscodeButton
62
+ key="maximize"
63
+ secondary
64
+ title={
65
+ panelData?.parent?.mode === 'maximize' ? 'Restore' : 'Maximize'
66
+ }
67
+ iconOnly
68
+ onClick={() => context.dockMove(panelData, null, 'maximize')}
69
+ >
70
+ {maxxed ? <Reduce /> : <Maximize />}
71
+ </VscodeButton>
72
+ );
73
+ }
74
+
75
+ return <div className={styles.panelExtra}>{buttons}</div>;
76
+ }
77
+ }
78
+ };
79
+
80
+ export const LayoutController = (props: {}) => {
81
+ const system = useSystem();
82
+ const showMenu = useStore(system.systemSettings, (x) => x.showMenu);
83
+ const setCurrentPanel = useStore(system.tabStore, (s) => s.setCurrentPanel);
84
+ const setLayout = useStore(system.tabStore, (s) => s.setLayout);
85
+ const layout = useStore(system.tabStore, (s) => s.layout);
86
+
87
+ const loadTab = useCallback(
88
+ (tab: TabBase): TabData => {
89
+ const loaded = system.tabLoader.load(tab);
90
+ if (!loaded) {
91
+ return tab as TabData;
92
+ }
93
+ return loaded;
94
+ },
95
+ [system, props]
96
+ );
97
+
98
+ const onLayoutChange = (newLayout: LayoutBase) => {
99
+ //We need to find the graph tab container in the newlayout
100
+ const graphContainer = findGraphPanel(newLayout);
101
+
102
+ if (graphContainer?.activeId) {
103
+ //Get the active Id to find the currently selected graph
104
+ setCurrentPanel(graphContainer.activeId!);
105
+
106
+ // Keep the editor's active graph in sync with the focused graph tab so
107
+ // panels bound via useActiveGraph() rebind to it.
108
+ if (isGraphTabId(graphContainer.activeId)) {
109
+ system.activeGraph
110
+ .getState()
111
+ .setActiveGraph(sessionIdFromTabId(graphContainer.activeId));
112
+ }
113
+ }
114
+
115
+ // Dispose sessions whose tabs were closed in this layout change.
116
+ const before = collectGraphSessionIds(layout);
117
+ const after = collectGraphSessionIds(newLayout);
118
+ for (const id of before) {
119
+ if (!after.has(id)) {
120
+ system.disposeSession(id);
121
+ }
122
+ }
123
+
124
+ setLayout(newLayout);
125
+ };
126
+
127
+ return (
128
+ <div className={styles.root}>
129
+ {showMenu && <MenuBar />}
130
+ <DockLayout
131
+ layout={layout}
132
+ groups={groups}
133
+ loadTab={loadTab}
134
+ style={{ flex: 1, height: '100%', width: '100%' }}
135
+ onLayoutChange={onLayoutChange}
136
+ />
137
+ <NotificationProvider />
138
+ </div>
139
+ );
140
+ };
@@ -0,0 +1,248 @@
1
+ import type { BoxBase, LayoutBase, PanelBase, TabData } from 'rc-dock';
2
+
3
+ /**
4
+ * Tab-id convention for graph tabs. The default graph uses the bare id `graph`
5
+ * (session id `graph`); every other graph uses `graph:<sessionId>`. These three
6
+ * helpers are the single source of truth for the convention.
7
+ */
8
+ const GRAPH_TAB_PREFIX = 'graph:';
9
+ export const DEFAULT_GRAPH_ID = 'graph';
10
+
11
+ export function isGraphTabId(id: string | undefined): id is string {
12
+ return !!id && (id === DEFAULT_GRAPH_ID || id.startsWith(GRAPH_TAB_PREFIX));
13
+ }
14
+
15
+ export function sessionIdFromTabId(tabId: string): string {
16
+ return tabId === DEFAULT_GRAPH_ID
17
+ ? DEFAULT_GRAPH_ID
18
+ : tabId.slice(GRAPH_TAB_PREFIX.length);
19
+ }
20
+
21
+ export function tabIdForSession(sessionId: string): string {
22
+ return sessionId === DEFAULT_GRAPH_ID
23
+ ? DEFAULT_GRAPH_ID
24
+ : `${GRAPH_TAB_PREFIX}${sessionId}`;
25
+ }
26
+
27
+ /** Collect the session ids of every graph tab present in a layout. */
28
+ export function collectGraphSessionIds(layout: LayoutBase): Set<string> {
29
+ const ids = new Set<string>();
30
+ const visit = (base?: BoxBase | PanelBase) => {
31
+ if (!base) return;
32
+ const panel = base as PanelBase;
33
+ if (panel.tabs) {
34
+ for (const tab of panel.tabs) {
35
+ if (isGraphTabId(tab.id)) ids.add(sessionIdFromTabId(tab.id!));
36
+ }
37
+ }
38
+ const box = base as BoxBase;
39
+ if (box.children) box.children.forEach(visit);
40
+ };
41
+ visit(layout.dockbox);
42
+ visit(layout.floatbox);
43
+ visit(layout.maxbox);
44
+ visit(layout.windowbox);
45
+ return ids;
46
+ }
47
+
48
+ function recurseFindGraphPanel(base: BoxBase | PanelBase): PanelBase | null {
49
+ if (base.id === 'graphs') {
50
+ return base as PanelBase;
51
+ }
52
+ //Check if it has children
53
+ if ((base as BoxBase).children) {
54
+ for (const child of (base as BoxBase).children) {
55
+ const found = recurseFindGraphPanel(child);
56
+ if (found) {
57
+ return found;
58
+ }
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+
64
+ export function findGraphPanel(layout: LayoutBase): PanelBase | null {
65
+ //We need to recursively search for the graph panel
66
+ // It is most likely in the dockbox
67
+ const dockbox = recurseFindGraphPanel(layout.dockbox);
68
+ if (dockbox) {
69
+ return dockbox;
70
+ }
71
+ if (layout.floatbox) {
72
+ const floatBox = recurseFindGraphPanel(layout.floatbox);
73
+ if (floatBox) {
74
+ return floatBox;
75
+ }
76
+ } else if (layout.maxbox) {
77
+ const tab = recurseFindGraphPanel(layout.maxbox);
78
+ if (tab) {
79
+ return tab;
80
+ }
81
+ } else if (layout.windowbox) {
82
+ const tab = recurseFindGraphPanel(layout.windowbox);
83
+ if (tab) {
84
+ return tab;
85
+ }
86
+ }
87
+ return null;
88
+ }
89
+
90
+ function recurseFindTab(
91
+ base: BoxBase | PanelBase,
92
+ tabId: string
93
+ ): PanelBase | null {
94
+ // Check if this is a panel with tabs
95
+ if ((base as PanelBase).tabs) {
96
+ const panel = base as PanelBase;
97
+ const hasTab = panel.tabs?.some((tab) => tab.id === tabId);
98
+ if (hasTab) {
99
+ return panel;
100
+ }
101
+ }
102
+
103
+ // Check if it has children
104
+ if ((base as BoxBase).children) {
105
+ for (const child of (base as BoxBase).children) {
106
+ const found = recurseFindTab(child, tabId);
107
+ if (found) {
108
+ return found;
109
+ }
110
+ }
111
+ }
112
+ return null;
113
+ }
114
+
115
+ export function findTabInLayout(
116
+ layout: LayoutBase,
117
+ tabId: string
118
+ ): PanelBase | null {
119
+ // Search in dockbox
120
+ if (layout.dockbox) {
121
+ const found = recurseFindTab(layout.dockbox, tabId);
122
+ if (found) return found;
123
+ }
124
+
125
+ // Search in floatbox
126
+ if (layout.floatbox) {
127
+ const found = recurseFindTab(layout.floatbox, tabId);
128
+ if (found) return found;
129
+ }
130
+
131
+ // Search in maxbox
132
+ if (layout.maxbox) {
133
+ const found = recurseFindTab(layout.maxbox, tabId);
134
+ if (found) return found;
135
+ }
136
+
137
+ // Search in windowbox
138
+ if (layout.windowbox) {
139
+ const found = recurseFindTab(layout.windowbox, tabId);
140
+ if (found) return found;
141
+ }
142
+
143
+ return null;
144
+ }
145
+
146
+ function removeTabFromPanel(panel: PanelBase, tabId: string): PanelBase {
147
+ return {
148
+ ...panel,
149
+ tabs: panel.tabs?.filter((tab) => tab.id !== tabId)
150
+ };
151
+ }
152
+
153
+ function recursiveRemoveTab(
154
+ base: BoxBase | PanelBase,
155
+ tabId: string
156
+ ): BoxBase | PanelBase | null {
157
+ // If this is a panel with tabs, remove the tab
158
+ if ((base as PanelBase).tabs) {
159
+ const panel = base as PanelBase;
160
+ const hasTab = panel.tabs?.some((tab) => tab.id === tabId);
161
+ if (hasTab) {
162
+ const updatedPanel = removeTabFromPanel(panel, tabId);
163
+ // If panel has no more tabs, return null to remove it
164
+ if (!updatedPanel.tabs || updatedPanel.tabs.length === 0) {
165
+ return null;
166
+ }
167
+ return updatedPanel;
168
+ }
169
+ return panel;
170
+ }
171
+
172
+ // If it has children, recursively update them
173
+ if ((base as BoxBase).children) {
174
+ const box = base as BoxBase;
175
+ const updatedChildren = box.children
176
+ .map((child) => recursiveRemoveTab(child, tabId))
177
+ .filter((child) => child !== null) as (BoxBase | PanelBase)[];
178
+
179
+ // If no children left, return null
180
+ if (updatedChildren.length === 0) {
181
+ return null;
182
+ }
183
+
184
+ return {
185
+ ...box,
186
+ children: updatedChildren
187
+ };
188
+ }
189
+
190
+ return base;
191
+ }
192
+
193
+ export function removeTabFromLayout(
194
+ layout: LayoutBase,
195
+ tabId: string
196
+ ): LayoutBase {
197
+ const newLayout = { ...layout };
198
+
199
+ if (newLayout.dockbox) {
200
+ const updated = recursiveRemoveTab(newLayout.dockbox, tabId);
201
+ if (updated) {
202
+ newLayout.dockbox = updated as BoxBase;
203
+ }
204
+ }
205
+
206
+ if (newLayout.floatbox) {
207
+ const updated = recursiveRemoveTab(newLayout.floatbox, tabId);
208
+ if (updated) {
209
+ newLayout.floatbox = updated as BoxBase;
210
+ } else {
211
+ delete newLayout.floatbox;
212
+ }
213
+ }
214
+
215
+ return newLayout;
216
+ }
217
+
218
+ export function addFloatingTab(
219
+ layout: LayoutBase,
220
+ tabData: Partial<TabData>,
221
+ position: { left: number; top: number; width: number; height: number }
222
+ ): LayoutBase {
223
+ const newLayout = { ...layout };
224
+
225
+ // Create or update floatbox
226
+ const newPanel: PanelBase = {
227
+ x: position.left,
228
+ y: position.top,
229
+ w: position.width,
230
+ h: position.height,
231
+ tabs: [tabData],
232
+ group: tabData.group || 'popout'
233
+ };
234
+
235
+ if (!newLayout.floatbox) {
236
+ newLayout.floatbox = {
237
+ mode: 'float',
238
+ children: [newPanel]
239
+ };
240
+ } else {
241
+ newLayout.floatbox = {
242
+ ...newLayout.floatbox,
243
+ children: [...(newLayout.floatbox.children || []), newPanel]
244
+ };
245
+ }
246
+
247
+ return newLayout;
248
+ }