@kiberon-labs/behave-graph-flow 1.0.0 → 2.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 (314) hide show
  1. package/.fallowrc.json +16 -0
  2. package/.storybook/main.ts +32 -0
  3. package/.storybook/preview.ts +16 -0
  4. package/.storybook/styles.css +10 -0
  5. package/.storybook/vscode.css +814 -0
  6. package/.turbo/turbo-build.log +7 -0
  7. package/LICENSE +6 -0
  8. package/README.md +2 -2
  9. package/data/Polynomial.json +510 -0
  10. package/data/sequence.json +337 -0
  11. package/data/trigger-event.json +241 -0
  12. package/data/variable-change.json +210 -0
  13. package/dist/entry.css +4 -0
  14. package/dist/index.css +39 -0
  15. package/dist/index.css.map +1 -0
  16. package/dist/index.d.ts +2282 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +14873 -0
  19. package/dist/index.js.map +1 -0
  20. package/docs/notifications.md +246 -0
  21. package/docs/protocol.md +679 -0
  22. package/docs/specifics.md +191 -0
  23. package/package.json +85 -21
  24. package/postcss.config.ts +3 -4
  25. package/src/annotations/index.ts +32 -0
  26. package/src/components/FloatingToolbar/index.module.css +45 -0
  27. package/src/components/FloatingToolbar/index.tsx +256 -0
  28. package/src/components/Flow.tsx +276 -75
  29. package/src/components/contextMenus/NodePicker.module.css +274 -0
  30. package/src/components/contextMenus/NodePicker.tsx +481 -0
  31. package/src/components/contextMenus/edge.tsx +108 -0
  32. package/src/components/contextMenus/node.tsx +155 -0
  33. package/src/components/contextMenus/selection.tsx +77 -0
  34. package/src/components/controls/any/index.tsx +8 -0
  35. package/src/components/controls/boolean/index.tsx +13 -0
  36. package/src/components/controls/colorPicker/InputPopover.module.css +100 -0
  37. package/src/components/controls/colorPicker/InputPopover.tsx +31 -0
  38. package/src/components/controls/colorPicker/index.module.css +18 -0
  39. package/src/components/controls/colorPicker/index.tsx +61 -0
  40. package/src/components/controls/number/index.tsx +35 -0
  41. package/src/components/controls/string/index.tsx +16 -0
  42. package/src/components/edges/index.tsx +469 -0
  43. package/src/components/edges/offsetBezier.ts +134 -0
  44. package/src/components/hotKeys.tsx +20 -0
  45. package/src/components/layoutController/index.module.css +10 -0
  46. package/src/components/layoutController/index.tsx +117 -0
  47. package/src/components/layoutController/utils.ts +205 -0
  48. package/src/components/menubar/defaults.tsx +480 -0
  49. package/src/components/menubar/index.tsx +49 -0
  50. package/src/components/menubar/menuItem.module.css +16 -0
  51. package/src/components/menubar/menuItem.tsx +32 -0
  52. package/src/components/nodes/behave/Node.module.css +23 -0
  53. package/src/components/nodes/behave/Node.tsx +176 -0
  54. package/src/components/nodes/behave/NodeContainer.module.css +87 -0
  55. package/src/components/nodes/behave/NodeContainer.tsx +46 -0
  56. package/src/components/nodes/behave/index.tsx +14 -0
  57. package/src/components/nodes/comment/FormatToolbar.tsx +118 -0
  58. package/src/components/nodes/comment/comment.tsx +103 -0
  59. package/src/components/nodes/comment/styles.module.css +150 -0
  60. package/src/components/nodes/group/index.tsx +109 -0
  61. package/src/components/nodes/wrapper/index.tsx +73 -0
  62. package/src/components/nodes/wrapper/styles.module.css +113 -0
  63. package/src/components/notifications/NotificationProvider.tsx +81 -0
  64. package/src/components/notifications/index.ts +2 -0
  65. package/src/components/notifications/utils.ts +71 -0
  66. package/src/components/panels/alignment/index.module.css +20 -0
  67. package/src/components/panels/alignment/index.tsx +244 -0
  68. package/src/components/panels/base/index.tsx +5 -0
  69. package/src/components/panels/base/styles.module.css +12 -0
  70. package/src/components/panels/conversation/index.module.css +151 -0
  71. package/src/components/panels/conversation/index.tsx +162 -0
  72. package/src/components/panels/events/CustomEventsEditor.tsx +384 -0
  73. package/src/components/panels/events/EditEventPanel.tsx +315 -0
  74. package/src/components/panels/events/ManageEventsPanel.tsx +98 -0
  75. package/src/components/panels/events/index.tsx +23 -0
  76. package/src/components/panels/events/styles.module.css +236 -0
  77. package/src/components/panels/history/index.tsx +92 -0
  78. package/src/components/panels/history/styles.module.css +106 -0
  79. package/src/components/panels/keymaps/index.module.css +78 -0
  80. package/src/components/panels/keymaps/index.tsx +167 -0
  81. package/src/components/panels/layers/index.tsx +240 -0
  82. package/src/components/panels/layers/styles.module.css +110 -0
  83. package/src/components/panels/legend/index.module.css +6 -0
  84. package/src/components/panels/legend/index.tsx +76 -0
  85. package/src/components/panels/logs/index.module.css +212 -0
  86. package/src/components/panels/logs/index.tsx +288 -0
  87. package/src/components/panels/nodeInputs/InputControl.tsx +63 -0
  88. package/src/components/panels/nodeInputs/InputsGroup.tsx +64 -0
  89. package/src/components/panels/nodeInputs/MultipleNodesView.tsx +37 -0
  90. package/src/components/panels/nodeInputs/NodeSettings.tsx +92 -0
  91. package/src/components/panels/nodeInputs/NodeTitleEditor.tsx +125 -0
  92. package/src/components/panels/nodeInputs/OutputsGroup.tsx +65 -0
  93. package/src/components/panels/nodeInputs/SocketGenerators.tsx +32 -0
  94. package/src/components/panels/nodeInputs/index.module.css +284 -0
  95. package/src/components/panels/nodeInputs/index.tsx +339 -0
  96. package/src/components/panels/nodeInputs/useNodeHandlers.ts +76 -0
  97. package/src/components/panels/nodeInputs/useNodeInputsData.ts +173 -0
  98. package/src/components/panels/nodePicker/index.tsx +115 -0
  99. package/src/components/panels/panel/index.module.css +66 -0
  100. package/src/components/panels/panel/index.tsx +88 -0
  101. package/src/components/panels/search/index.module.css +66 -0
  102. package/src/components/panels/search/index.tsx +215 -0
  103. package/src/components/panels/systemSettings/index.tsx +206 -0
  104. package/src/components/panels/systemSettings/styles.module.css +11 -0
  105. package/src/components/panels/traces/GridLines.tsx +38 -0
  106. package/src/components/panels/traces/TimeGrid.tsx +48 -0
  107. package/src/components/panels/traces/TraceLane.tsx +62 -0
  108. package/src/components/panels/traces/TraceTooltip.tsx +22 -0
  109. package/src/components/panels/traces/TracesHeader.tsx +56 -0
  110. package/src/components/panels/traces/index.module.css +166 -0
  111. package/src/components/panels/traces/index.tsx +294 -0
  112. package/src/components/panels/traces/types.ts +48 -0
  113. package/src/components/panels/traces/useDerivedSpans.ts +212 -0
  114. package/src/components/panels/traces/utils.ts +25 -0
  115. package/src/components/panels/variables/CreateVariableScreen.tsx +162 -0
  116. package/src/components/panels/variables/ManageVariablesScreen.tsx +144 -0
  117. package/src/components/panels/variables/index.tsx +125 -0
  118. package/src/components/panels/variables/styles.module.css +236 -0
  119. package/src/components/primitives/icon.module.css +45 -0
  120. package/src/components/primitives/icon.tsx +38 -0
  121. package/src/components/sockets/input/index.tsx +76 -0
  122. package/src/components/sockets/input/styles.module.css +27 -0
  123. package/src/components/sockets/output/index.tsx +61 -0
  124. package/src/components/sockets/output/styles.module.css +27 -0
  125. package/src/css/prosemirror.css +57 -0
  126. package/src/css/rc-dock.css +112 -0
  127. package/src/css/rc-menu.css +100 -0
  128. package/src/css/vars.css +14 -0
  129. package/src/css/vscode.css +13 -0
  130. package/src/entry.css +4 -0
  131. package/src/generators/CustomEventOnTriggeredGenerator.tsx +85 -0
  132. package/src/generators/SequenceGenerator.tsx +104 -0
  133. package/src/generators/SwitchOnIntegerGenerator.tsx +256 -0
  134. package/src/generators/SwitchOnStringGenerator.tsx +263 -0
  135. package/src/generators/registerDefaultGenerators.ts +34 -0
  136. package/src/hooks/useBehaveGraphFlow.ts +17 -16
  137. package/src/hooks/useDetachNodes.ts +39 -0
  138. package/src/hooks/useFlowHandlers.ts +115 -29
  139. package/src/hooks/useWasdPan.ts +188 -0
  140. package/src/index.css +146 -0
  141. package/src/index.ts +36 -18
  142. package/src/layout/dagre.tsx +119 -0
  143. package/src/layout/elk.ts +200 -0
  144. package/src/plugin/alignment/index.ts +81 -0
  145. package/src/plugin/docs/index.tsx +299 -0
  146. package/src/plugin/docs/panel/index.tsx +200 -0
  147. package/src/plugin/docs/panel/styles.module.css +174 -0
  148. package/src/plugin/graphrunner/actions.ts +253 -0
  149. package/src/plugin/graphrunner/buttons.tsx +87 -0
  150. package/src/plugin/graphrunner/client.ts +704 -0
  151. package/src/plugin/graphrunner/index.tsx +255 -0
  152. package/src/plugin/graphrunner/panel.tsx +386 -0
  153. package/src/plugin/graphrunner/runner.ts +358 -0
  154. package/src/plugin/graphrunner/session.ts +243 -0
  155. package/src/plugin/graphrunner/store.ts +206 -0
  156. package/src/plugin/graphrunner/styles.module.css +211 -0
  157. package/src/plugin/graphrunner/transport.ts +224 -0
  158. package/src/plugin/graphrunner/types.ts +672 -0
  159. package/src/plugin/graphrunner-local/execution-utils.ts +457 -0
  160. package/src/plugin/graphrunner-local/index.tsx +166 -0
  161. package/src/plugin/graphrunner-local/panel.tsx +231 -0
  162. package/src/plugin/graphrunner-local/store.ts +41 -0
  163. package/src/plugin/graphrunner-local/styles.module.css +101 -0
  164. package/src/plugin/graphrunner-local/transport.ts +1372 -0
  165. package/src/plugin/graphrunner-local/types.ts +10 -0
  166. package/src/plugin/graphrunner-webworker/graph-executor.worker.ts +633 -0
  167. package/src/plugin/graphrunner-webworker/index.tsx +146 -0
  168. package/src/plugin/graphrunner-webworker/panel.tsx +173 -0
  169. package/src/plugin/graphrunner-webworker/store.ts +89 -0
  170. package/src/plugin/graphrunner-webworker/types.ts +17 -0
  171. package/src/plugin/graphrunner-webworker/worker-transport.ts +123 -0
  172. package/src/plugin/realtime/realtimeRunner.ts +570 -0
  173. package/src/specifics/CustomEventOnTriggeredSpecific.tsx +92 -0
  174. package/src/specifics/CustomEventTriggerSpecific.tsx +141 -0
  175. package/src/specifics/VariableGetSpecific.tsx +110 -0
  176. package/src/specifics/VariableSetSpecific.tsx +110 -0
  177. package/src/specifics/registerDefaultSpecifics.ts +5 -0
  178. package/src/store/actions.tsx +698 -0
  179. package/src/store/chat.ts +73 -0
  180. package/src/store/controls.tsx +62 -0
  181. package/src/store/documentation.tsx +69 -0
  182. package/src/store/events.tsx +116 -0
  183. package/src/store/flow.tsx +245 -0
  184. package/src/store/graphRunnerClient.ts +110 -0
  185. package/src/store/hotKeys.tsx +323 -0
  186. package/src/store/layers.ts +259 -0
  187. package/src/store/legend.tsx +76 -0
  188. package/src/store/logs.ts +28 -0
  189. package/src/store/menubar.ts +41 -0
  190. package/src/store/refs.ts +84 -0
  191. package/src/store/registry.ts +43 -0
  192. package/src/store/selection.ts +22 -0
  193. package/src/store/settings.ts +99 -0
  194. package/src/store/socketGenerator.tsx +54 -0
  195. package/src/store/specific.tsx +75 -0
  196. package/src/store/specs.tsx +35 -0
  197. package/src/store/tabs.ts +278 -0
  198. package/src/store/toolbar.tsx +45 -0
  199. package/src/store/traces.ts +240 -0
  200. package/src/store/variables.ts +37 -0
  201. package/src/system/graph.ts +134 -0
  202. package/src/system/index.ts +3 -0
  203. package/src/system/notifications.ts +98 -0
  204. package/src/system/plugin.ts +27 -0
  205. package/src/system/provider.tsx +22 -0
  206. package/src/system/pubsub.ts +323 -0
  207. package/src/system/system.ts +223 -0
  208. package/src/system/tabLoader.tsx +265 -0
  209. package/src/system/undoRedo.ts +103 -0
  210. package/src/transformers/Uigraph.ts +60 -0
  211. package/src/transformers/behaveToFlow.ts +16 -4
  212. package/src/transformers/flowToBehave.ts +32 -12
  213. package/src/types/NodeMetadata.ts +27 -0
  214. package/src/types/graph.ts +49 -0
  215. package/src/types/nodes.ts +45 -0
  216. package/src/types.ts +16 -0
  217. package/src/util/colors.ts +1 -29
  218. package/src/util/downloadJson.ts +18 -0
  219. package/src/util/extractNodeMetadata.ts +16 -0
  220. package/src/util/getPickerFilters.ts +1 -1
  221. package/src/util/isBehaveNode.ts +6 -0
  222. package/src/util/isValidConnection.ts +28 -15
  223. package/src/util/mergeSockets.ts +29 -0
  224. package/src/util/serializeVariables.ts +66 -0
  225. package/src/util/sockets.ts +43 -0
  226. package/stories/apex/layoutController/example-graph.worker.ts +39 -0
  227. package/stories/apex/layoutController/index.stories.tsx +48 -0
  228. package/stories/apex/layoutController/webworker.stories.tsx +103 -0
  229. package/stories/apex/menubar/menubar.stories.tsx +19 -0
  230. package/stories/components/colorpicker/index.stories.tsx +20 -0
  231. package/stories/components/contextMenus/edge.stories.tsx +32 -0
  232. package/stories/components/contextMenus/node.stories.tsx +26 -0
  233. package/stories/components/contextMenus/nodePicker.stories.tsx +115 -0
  234. package/stories/components/controls/any/index.stories.tsx +19 -0
  235. package/stories/components/controls/boolean/index.stories.tsx +19 -0
  236. package/stories/components/controls/colorPicker/index.stories.tsx +49 -0
  237. package/stories/components/controls/number/index.stories.tsx +19 -0
  238. package/stories/components/controls/string/index.stories.tsx +19 -0
  239. package/stories/components/nodes/behaveNode.stories.tsx +108 -0
  240. package/stories/components/nodes/comment.stories.tsx +106 -0
  241. package/stories/components/panels/alignment.stories.tsx +24 -0
  242. package/stories/components/panels/events.stories.tsx +38 -0
  243. package/stories/components/panels/graphRunner.stories.tsx +317 -0
  244. package/stories/components/panels/history.stories.tsx +37 -0
  245. package/stories/components/panels/keymaps.stories.tsx +21 -0
  246. package/stories/components/panels/legend.stories.tsx +37 -0
  247. package/stories/components/panels/logs.stories.tsx +24 -0
  248. package/stories/components/panels/nodeInputs.stories.tsx +21 -0
  249. package/stories/components/panels/nodePicker.stories.tsx +37 -0
  250. package/stories/components/panels/panel.stories.tsx +39 -0
  251. package/stories/components/panels/search.stories.tsx +24 -0
  252. package/stories/components/panels/systemSettings.stories.tsx +26 -0
  253. package/stories/components/panels/traces.stories.tsx +225 -0
  254. package/stories/components/panels/variables.stories.tsx +24 -0
  255. package/stories/defaults/defaultStoryProvider.tsx +167 -0
  256. package/stories/defaults/systemGenerator.ts +38 -0
  257. package/tests/components/edges/offsetBezier.test.ts +51 -0
  258. package/tests/components/layoutController/utils.test.ts +68 -0
  259. package/tests/components/panels/traces/utils.test.ts +52 -0
  260. package/tests/flowToBehave.test.ts +26 -4
  261. package/tests/notifications.test.ts +87 -0
  262. package/tests/saveLoad.test.ts +372 -0
  263. package/tests/util/calculateNewEdge.test.ts +98 -0
  264. package/tests/util/getSocketsByNodeTypeAndHandleType.test.ts +31 -0
  265. package/tests/util/hasPositionMetaData.test.ts +33 -0
  266. package/tests/util/isBehaveNode.test.ts +22 -0
  267. package/tests/util/isHandleConnected.test.ts +37 -0
  268. package/tests/util/mergeSockets.test.ts +43 -0
  269. package/tests/visual/README.md +64 -0
  270. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-alignment-chromium-win32.png +0 -0
  271. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-conversation-chromium-win32.png +0 -0
  272. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-events-chromium-win32.png +0 -0
  273. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-history-chromium-win32.png +0 -0
  274. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-keymaps-chromium-win32.png +0 -0
  275. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-layers-chromium-win32.png +0 -0
  276. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-legend-chromium-win32.png +0 -0
  277. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-logs-chromium-win32.png +0 -0
  278. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-nodeInputs-chromium-win32.png +0 -0
  279. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-nodePicker-chromium-win32.png +0 -0
  280. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-panel-chromium-win32.png +0 -0
  281. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-search-chromium-win32.png +0 -0
  282. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-systemSettings-chromium-win32.png +0 -0
  283. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-traces-chromium-win32.png +0 -0
  284. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-variables-chromium-win32.png +0 -0
  285. package/tests/visual/panels.visual.test.tsx +76 -0
  286. package/tsconfig.base.json +39 -0
  287. package/tsconfig.json +18 -59
  288. package/tsconfig.prod.json +23 -0
  289. package/tsdown.config.ts +15 -3
  290. package/typedoc.json +7 -7
  291. package/vite.config.js +7 -0
  292. package/vitest.config.ts +5 -2
  293. package/vitest.visual.config.ts +48 -0
  294. package/src/components/AutoSizeInput.tsx +0 -65
  295. package/src/components/Controls.tsx +0 -87
  296. package/src/components/InputSocket.tsx +0 -142
  297. package/src/components/Node.tsx +0 -68
  298. package/src/components/NodeContainer.tsx +0 -46
  299. package/src/components/NodePicker.tsx +0 -77
  300. package/src/components/OutputSocket.tsx +0 -58
  301. package/src/components/modals/ClearModal.tsx +0 -40
  302. package/src/components/modals/HelpModal.tsx +0 -36
  303. package/src/components/modals/LoadModal.tsx +0 -96
  304. package/src/components/modals/Modal.tsx +0 -64
  305. package/src/components/modals/SaveModal.tsx +0 -60
  306. package/src/hooks/useCustomNodeTypes.tsx +0 -31
  307. package/src/hooks/useGraphRunner.ts +0 -104
  308. package/src/hooks/useMergeMap.ts +0 -14
  309. package/src/hooks/useNodeSpecJson.ts +0 -20
  310. package/src/hooks/useQueriableDefinitions.ts +0 -22
  311. package/src/styles.css +0 -8
  312. package/tailwind.config.ts +0 -19
  313. package/tests/tsconfig.json +0 -10
  314. /package/src/{types.d.ts → types-declarations.d.ts} +0 -0
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react-vite';
3
+ import { EventsPanel } from '@/components/panels/events';
4
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
5
+
6
+ const meta: Meta<typeof EventsPanel> = {
7
+ title: 'Components/Panels/EventsPanel',
8
+ component: EventsPanel,
9
+ decorators: [
10
+ (Story) => (
11
+ <DefaultSystemProvider>
12
+ <Story />
13
+ </DefaultSystemProvider>
14
+ )
15
+ ],
16
+ parameters: {
17
+ layout: 'fullscreen',
18
+ docs: {
19
+ description: {
20
+ component: 'EventsPanel component for displaying and managing events.'
21
+ }
22
+ }
23
+ }
24
+ };
25
+ export default meta;
26
+
27
+ type Story = StoryObj<typeof EventsPanel>;
28
+
29
+ export const Default: Story = {
30
+ args: {},
31
+ parameters: {
32
+ docs: {
33
+ description: {
34
+ story: 'Default EventsPanel.'
35
+ }
36
+ }
37
+ }
38
+ };
@@ -0,0 +1,317 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { GraphRunnerPanel } from '@/plugin/graphrunner/panel';
3
+ import { graphRunnerClientPlugin } from '@/plugin/graphrunner';
4
+ import { System } from '@/system/system';
5
+ import {
6
+ registerCoreProfile,
7
+ writeNodeSpecsToJSON
8
+ } from '@kiberon-labs/behave-graph';
9
+ import { SystemProvider } from '@/system/provider';
10
+
11
+ const meta: Meta<typeof GraphRunnerPanel> = {
12
+ title: 'Components/Panels/GraphRunner',
13
+ component: GraphRunnerPanel,
14
+ parameters: {
15
+ layout: 'fullscreen',
16
+ docs: {
17
+ description: {
18
+ component:
19
+ 'GraphRunnerPanel component for managing remote graph execution via WebSocket connections.'
20
+ }
21
+ }
22
+ }
23
+ };
24
+
25
+ export default meta;
26
+ type Story = StoryObj<typeof GraphRunnerPanel>;
27
+
28
+ /**
29
+ * Default story showing the GraphRunnerPanel in disconnected state
30
+ */
31
+ export const Disconnected: Story = {
32
+ render: () => {
33
+ // Create a system with the graphRunnerClient plugin
34
+ const coreRegistry = registerCoreProfile({
35
+ nodes: {},
36
+ values: {},
37
+ dependencies: {}
38
+ });
39
+ const nodeSpecs = writeNodeSpecsToJSON(coreRegistry);
40
+ const nodeRegistry = {
41
+ values: coreRegistry.values,
42
+ specs: nodeSpecs
43
+ };
44
+
45
+ const system = new System(nodeRegistry);
46
+ system.registerPlugin(graphRunnerClientPlugin);
47
+
48
+ return (
49
+ <SystemProvider value={system}>
50
+ <GraphRunnerPanel system={system} />
51
+ </SystemProvider>
52
+ );
53
+ },
54
+ parameters: {
55
+ docs: {
56
+ description: {
57
+ story: 'Default disconnected state with connection form.'
58
+ }
59
+ }
60
+ }
61
+ };
62
+
63
+ /**
64
+ * Story showing the GraphRunnerPanel with connection configuration
65
+ */
66
+ export const WithConfiguration: Story = {
67
+ render: () => {
68
+ const coreRegistry = registerCoreProfile({
69
+ nodes: {},
70
+ values: {},
71
+ dependencies: {}
72
+ });
73
+ const nodeSpecs = writeNodeSpecsToJSON(coreRegistry);
74
+ const nodeRegistry = {
75
+ values: coreRegistry.values,
76
+ specs: nodeSpecs
77
+ };
78
+
79
+ const system = new System(nodeRegistry);
80
+ system.registerPlugin(graphRunnerClientPlugin);
81
+
82
+ // Pre-configure connection settings
83
+ system.runner.store.getState().setConnectionConfig({
84
+ url: 'ws://localhost:8080',
85
+ auth: { type: 'bearer' },
86
+ autoReconnect: true
87
+ });
88
+
89
+ return (
90
+ <SystemProvider value={system}>
91
+ <GraphRunnerPanel system={system} />
92
+ </SystemProvider>
93
+ );
94
+ },
95
+ parameters: {
96
+ docs: {
97
+ description: {
98
+ story: 'GraphRunnerPanel with pre-configured connection settings.'
99
+ }
100
+ }
101
+ }
102
+ };
103
+
104
+ /**
105
+ * Story simulating a connected state with server metadata
106
+ */
107
+ export const Connected: Story = {
108
+ render: () => {
109
+ const coreRegistry = registerCoreProfile({
110
+ nodes: {},
111
+ values: {},
112
+ dependencies: {}
113
+ });
114
+ const nodeSpecs = writeNodeSpecsToJSON(coreRegistry);
115
+ const nodeRegistry = {
116
+ values: coreRegistry.values,
117
+ specs: nodeSpecs
118
+ };
119
+
120
+ const system = new System(nodeRegistry);
121
+ system.registerPlugin(graphRunnerClientPlugin);
122
+
123
+ const store = system.runner.store;
124
+
125
+ // Simulate connected state
126
+ store.getState().setConnectionState('connected');
127
+ store.getState().setConnectionConfig({
128
+ url: 'ws://localhost:8080',
129
+ auth: { type: 'none' },
130
+ autoReconnect: true
131
+ });
132
+ store.getState().setConnectionInfo({
133
+ serverId: 'demo-server-01',
134
+ userId: 'user-123',
135
+ sessionId: 'session-abc-456',
136
+ authenticated: true,
137
+ capabilities: {
138
+ execute: true,
139
+ pause: true,
140
+ step: true,
141
+ variables: true,
142
+ events: true
143
+ }
144
+ });
145
+
146
+ // Add sample server variables
147
+ store.getState().setServerVariables([
148
+ { name: 'playerHealth', type: 'float', currentValue: 100 },
149
+ { name: 'gameScore', type: 'integer', currentValue: 1500 },
150
+ { name: 'playerName', type: 'string', currentValue: 'Hero' },
151
+ { name: 'isGameActive', type: 'boolean', currentValue: true }
152
+ ]);
153
+
154
+ // Add sample server events
155
+ store.getState().setServerEvents([
156
+ {
157
+ id: 'event-1',
158
+ name: 'onPlayerDamage',
159
+ description: 'Triggered when player takes damage',
160
+ readonly: true,
161
+ parameters: [
162
+ { name: 'damage', valueTypeName: 'number', defaultValue: 0 },
163
+ { name: 'source', valueTypeName: 'string', defaultValue: 'xx' }
164
+ ]
165
+ },
166
+ {
167
+ id: 'event-2',
168
+ name: 'onScoreUpdate',
169
+ description: 'Triggered when score changes',
170
+ readonly: true,
171
+ parameters: [
172
+ { name: 'newScore', valueTypeName: 'number', defaultValue: 0 },
173
+ { name: 'delta', valueTypeName: 'number', defaultValue: 0 }
174
+ ]
175
+ }
176
+ ]);
177
+
178
+ // Add sample node types
179
+ store.getState().setNodeTypes([
180
+ {
181
+ type: 'game/dealDamage',
182
+ label: 'Deal Damage',
183
+ description: 'Applies damage to a target',
184
+ category: 'Game',
185
+ inputs: [
186
+ { name: 'target', type: 'string' },
187
+ { name: 'amount', type: 'float' }
188
+ ],
189
+ outputs: [{ name: 'success', type: 'boolean' }]
190
+ },
191
+ {
192
+ type: 'game/updateScore',
193
+ label: 'Update Score',
194
+ description: 'Modifies the player score',
195
+ category: 'Game',
196
+ inputs: [{ name: 'delta', type: 'integer' }],
197
+ outputs: [{ name: 'newScore', type: 'integer' }]
198
+ }
199
+ ]);
200
+
201
+ // Add sample message activity
202
+ store.getState().addMessageActivity('sent', {
203
+ type: 'connect',
204
+ id: 'msg-001'
205
+ });
206
+ store.getState().addMessageActivity('received', {
207
+ type: 'welcome',
208
+ id: 'msg-002',
209
+ serverId: 'demo-server-01',
210
+ capabilities: {
211
+ execute: true,
212
+ pause: true,
213
+ step: true,
214
+ variables: true,
215
+ events: true
216
+ }
217
+ });
218
+ store.getState().addMessageActivity('sent', {
219
+ type: 'getMetadata',
220
+ id: 'msg-003'
221
+ });
222
+
223
+ return (
224
+ <SystemProvider value={system}>
225
+ <GraphRunnerPanel system={system} />
226
+ </SystemProvider>
227
+ );
228
+ },
229
+ parameters: {
230
+ docs: {
231
+ description: {
232
+ story:
233
+ 'GraphRunnerPanel in connected state with server variables, events, node types, and message activity.'
234
+ }
235
+ }
236
+ }
237
+ };
238
+
239
+ /**
240
+ * Story showing the connecting state
241
+ */
242
+ export const Connecting: Story = {
243
+ render: () => {
244
+ const coreRegistry = registerCoreProfile({
245
+ nodes: {},
246
+ values: {},
247
+ dependencies: {}
248
+ });
249
+ const nodeSpecs = writeNodeSpecsToJSON(coreRegistry);
250
+ const nodeRegistry = {
251
+ values: coreRegistry.values,
252
+ specs: nodeSpecs
253
+ };
254
+
255
+ const system = new System(nodeRegistry);
256
+ system.registerPlugin(graphRunnerClientPlugin);
257
+
258
+ system.runner.store.getState().setConnectionState('connecting');
259
+ system.runner.store.getState().setConnectionConfig({
260
+ url: 'ws://localhost:8080',
261
+ auth: { type: 'none' },
262
+ autoReconnect: true
263
+ });
264
+
265
+ return (
266
+ <SystemProvider value={system}>
267
+ <GraphRunnerPanel system={system} />
268
+ </SystemProvider>
269
+ );
270
+ },
271
+ parameters: {
272
+ docs: {
273
+ description: {
274
+ story: 'GraphRunnerPanel in connecting state.'
275
+ }
276
+ }
277
+ }
278
+ };
279
+
280
+ /**
281
+ * Story showing an error state
282
+ */
283
+ export const WithError: Story = {
284
+ render: () => {
285
+ const coreRegistry = registerCoreProfile({
286
+ nodes: {},
287
+ values: {},
288
+ dependencies: {}
289
+ });
290
+ const nodeSpecs = writeNodeSpecsToJSON(coreRegistry);
291
+ const nodeRegistry = {
292
+ values: coreRegistry.values,
293
+ specs: nodeSpecs
294
+ };
295
+
296
+ const system = new System(nodeRegistry);
297
+ system.registerPlugin(graphRunnerClientPlugin);
298
+
299
+ system.runner.store.getState().setConnectionState('disconnected');
300
+ system.runner.store
301
+ .getState()
302
+ .setError('Failed to connect: Connection timeout after 30 seconds');
303
+
304
+ return (
305
+ <SystemProvider value={system}>
306
+ <GraphRunnerPanel system={system} />
307
+ </SystemProvider>
308
+ );
309
+ },
310
+ parameters: {
311
+ docs: {
312
+ description: {
313
+ story: 'GraphRunnerPanel displaying a connection error.'
314
+ }
315
+ }
316
+ }
317
+ };
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react-vite';
3
+ import { HistoryPanel } from '@/components/panels/history';
4
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
5
+
6
+ const meta: Meta<typeof HistoryPanel> = {
7
+ title: 'Components/Panels/HistoryPanel',
8
+ component: HistoryPanel,
9
+ decorators: [
10
+ (Story) => (
11
+ <DefaultSystemProvider>
12
+ <Story />
13
+ </DefaultSystemProvider>
14
+ )
15
+ ],
16
+ parameters: {
17
+ docs: {
18
+ description: {
19
+ component: 'HistoryPanel component for displaying action history.'
20
+ }
21
+ }
22
+ }
23
+ };
24
+ export default meta;
25
+
26
+ type Story = StoryObj<typeof HistoryPanel>;
27
+
28
+ export const Default: Story = {
29
+ args: {},
30
+ parameters: {
31
+ docs: {
32
+ description: {
33
+ story: 'Default HistoryPanel.'
34
+ }
35
+ }
36
+ }
37
+ };
@@ -0,0 +1,21 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { KeymapsPanel } from '@/components/panels/keymaps';
3
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
4
+
5
+ const meta: Meta<typeof KeymapsPanel> = {
6
+ title: 'Components/Panels/Keymaps',
7
+ component: KeymapsPanel
8
+ };
9
+
10
+ export default meta;
11
+ type Story = StoryObj<typeof KeymapsPanel>;
12
+ export const Default: Story = {
13
+ render: () => {
14
+ return (
15
+ <DefaultSystemProvider>
16
+ <KeymapsPanel />
17
+ </DefaultSystemProvider>
18
+ );
19
+ },
20
+ args: {}
21
+ };
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react-vite';
3
+ import { LegendPanel } from '@/components/panels/legend';
4
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
5
+
6
+ const meta: Meta<typeof LegendPanel> = {
7
+ title: 'Components/Panels/LegendPanel',
8
+ component: LegendPanel,
9
+ decorators: [
10
+ (Story) => (
11
+ <DefaultSystemProvider>
12
+ <Story />
13
+ </DefaultSystemProvider>
14
+ )
15
+ ],
16
+ parameters: {
17
+ docs: {
18
+ description: {
19
+ component: 'LegendPanel component for displaying graph legends.'
20
+ }
21
+ }
22
+ }
23
+ };
24
+ export default meta;
25
+
26
+ type Story = StoryObj<typeof LegendPanel>;
27
+
28
+ export const Default: Story = {
29
+ args: {},
30
+ parameters: {
31
+ docs: {
32
+ description: {
33
+ story: 'Default LegendPanel.'
34
+ }
35
+ }
36
+ }
37
+ };
@@ -0,0 +1,24 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { LogsPanel } from '@/components/panels/logs';
3
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
4
+
5
+ const meta: Meta<typeof LogsPanel> = {
6
+ title: 'Components/Panels/Logs',
7
+ component: LogsPanel,
8
+ parameters: {
9
+ layout: 'fullscreen'
10
+ }
11
+ };
12
+
13
+ export default meta;
14
+ type Story = StoryObj<typeof LogsPanel>;
15
+ export const Default: Story = {
16
+ render: () => {
17
+ return (
18
+ <DefaultSystemProvider>
19
+ <LogsPanel />
20
+ </DefaultSystemProvider>
21
+ );
22
+ },
23
+ args: {}
24
+ };
@@ -0,0 +1,21 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { NodeInputsPanel } from '@/components/panels/nodeInputs';
3
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
4
+
5
+ const meta: Meta<typeof NodeInputsPanel> = {
6
+ title: 'Components/Panels/NodeInputs',
7
+ component: NodeInputsPanel
8
+ };
9
+
10
+ export default meta;
11
+ type Story = StoryObj<typeof NodeInputsPanel>;
12
+ export const Default: Story = {
13
+ render: () => {
14
+ return (
15
+ <DefaultSystemProvider>
16
+ <NodeInputsPanel />
17
+ </DefaultSystemProvider>
18
+ );
19
+ },
20
+ args: {}
21
+ };
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react-vite';
3
+ import { NodePickerPanel } from '@/components/panels/nodePicker';
4
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
5
+
6
+ const meta: Meta<typeof NodePickerPanel> = {
7
+ title: 'Components/Panels/NodePickerPanel',
8
+ component: NodePickerPanel,
9
+ decorators: [
10
+ (Story) => (
11
+ <DefaultSystemProvider>
12
+ <Story />
13
+ </DefaultSystemProvider>
14
+ )
15
+ ],
16
+ parameters: {
17
+ docs: {
18
+ description: {
19
+ component: 'NodePickerPanel component for picking nodes from a list.'
20
+ }
21
+ }
22
+ }
23
+ };
24
+ export default meta;
25
+
26
+ type Story = StoryObj<typeof NodePickerPanel>;
27
+
28
+ export const Default: Story = {
29
+ args: {},
30
+ parameters: {
31
+ docs: {
32
+ description: {
33
+ story: 'Default NodePickerPanel.'
34
+ }
35
+ }
36
+ }
37
+ };
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react-vite';
3
+ import { PanelPanel } from '@/components/panels/panel';
4
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
5
+
6
+ const meta: Meta<typeof PanelPanel> = {
7
+ title: 'Components/Panels/PanelPanel',
8
+ component: PanelPanel,
9
+ decorators: [
10
+ (Story) => (
11
+ <DefaultSystemProvider>
12
+ <Story />
13
+ </DefaultSystemProvider>
14
+ )
15
+ ],
16
+ parameters: {
17
+ layout: 'fullscreen',
18
+ docs: {
19
+ description: {
20
+ component:
21
+ 'PanelPanel component for displaying all registered panels and allowing users to open them.'
22
+ }
23
+ }
24
+ }
25
+ };
26
+ export default meta;
27
+
28
+ type Story = StoryObj<typeof PanelPanel>;
29
+
30
+ export const Default: Story = {
31
+ args: {},
32
+ parameters: {
33
+ docs: {
34
+ description: {
35
+ story: 'Default PanelPanel showing all registered panels in the system.'
36
+ }
37
+ }
38
+ }
39
+ };
@@ -0,0 +1,24 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { SearchPanel } from '@/components/panels/search';
3
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
4
+
5
+ const meta: Meta<typeof SearchPanel> = {
6
+ title: 'Components/Panels/Search',
7
+ component: SearchPanel,
8
+ parameters: {
9
+ layout: 'fullscreen'
10
+ }
11
+ };
12
+
13
+ export default meta;
14
+ type Story = StoryObj<typeof SearchPanel>;
15
+ export const Default: Story = {
16
+ render: () => {
17
+ return (
18
+ <DefaultSystemProvider>
19
+ <SearchPanel />
20
+ </DefaultSystemProvider>
21
+ );
22
+ },
23
+ args: {}
24
+ };
@@ -0,0 +1,26 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+
3
+ import { Settings } from '@/components/panels/systemSettings';
4
+ import { DefaultSystemProvider } from '~/defaults/defaultStoryProvider';
5
+
6
+ const meta: Meta<typeof Settings> = {
7
+ component: Settings,
8
+ decorators: [
9
+ (Story) => (
10
+ <DefaultSystemProvider>
11
+ <Story />
12
+ </DefaultSystemProvider>
13
+ )
14
+ ],
15
+ parameters: {
16
+ layout: 'fullscreen'
17
+ }
18
+ };
19
+
20
+ export default meta;
21
+
22
+ type Story = StoryObj<typeof meta>;
23
+
24
+ export const Default: Story = {
25
+ args: {}
26
+ };