@xyne/workflow-ui 0.1.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 (459) hide show
  1. package/README.md +38 -0
  2. package/dist/components/automations/AutomationCard.d.ts +8 -0
  3. package/dist/components/automations/AutomationCard.d.ts.map +1 -0
  4. package/dist/components/automations/AutomationCard.js +55 -0
  5. package/dist/components/automations/AutomationCard.js.map +1 -0
  6. package/dist/components/automations/AutomationListView.d.ts +7 -0
  7. package/dist/components/automations/AutomationListView.d.ts.map +1 -0
  8. package/dist/components/automations/AutomationListView.js +22 -0
  9. package/dist/components/automations/AutomationListView.js.map +1 -0
  10. package/dist/components/automations/CreateWorkflowDialog.d.ts +7 -0
  11. package/dist/components/automations/CreateWorkflowDialog.d.ts.map +1 -0
  12. package/dist/components/automations/CreateWorkflowDialog.js +70 -0
  13. package/dist/components/automations/CreateWorkflowDialog.js.map +1 -0
  14. package/dist/components/builder/AddStepButton.d.ts +6 -0
  15. package/dist/components/builder/AddStepButton.d.ts.map +1 -0
  16. package/dist/components/builder/AddStepButton.js +7 -0
  17. package/dist/components/builder/AddStepButton.js.map +1 -0
  18. package/dist/components/builder/BranchEdge.d.ts +3 -0
  19. package/dist/components/builder/BranchEdge.d.ts.map +1 -0
  20. package/dist/components/builder/BranchEdge.js +19 -0
  21. package/dist/components/builder/BranchEdge.js.map +1 -0
  22. package/dist/components/builder/BuilderToolbar.d.ts +10 -0
  23. package/dist/components/builder/BuilderToolbar.d.ts.map +1 -0
  24. package/dist/components/builder/BuilderToolbar.js +16 -0
  25. package/dist/components/builder/BuilderToolbar.js.map +1 -0
  26. package/dist/components/builder/StepConfigDrawer.d.ts +11 -0
  27. package/dist/components/builder/StepConfigDrawer.d.ts.map +1 -0
  28. package/dist/components/builder/StepConfigDrawer.js +21 -0
  29. package/dist/components/builder/StepConfigDrawer.js.map +1 -0
  30. package/dist/components/builder/StepNode.d.ts +15 -0
  31. package/dist/components/builder/StepNode.d.ts.map +1 -0
  32. package/dist/components/builder/StepNode.js +56 -0
  33. package/dist/components/builder/StepNode.js.map +1 -0
  34. package/dist/components/builder/StepPalette.d.ts +7 -0
  35. package/dist/components/builder/StepPalette.d.ts.map +1 -0
  36. package/dist/components/builder/StepPalette.js +83 -0
  37. package/dist/components/builder/StepPalette.js.map +1 -0
  38. package/dist/components/builder/StepPicker.d.ts +9 -0
  39. package/dist/components/builder/StepPicker.d.ts.map +1 -0
  40. package/dist/components/builder/StepPicker.js +95 -0
  41. package/dist/components/builder/StepPicker.js.map +1 -0
  42. package/dist/components/builder/TerminalNode.d.ts +6 -0
  43. package/dist/components/builder/TerminalNode.d.ts.map +1 -0
  44. package/dist/components/builder/TerminalNode.js +7 -0
  45. package/dist/components/builder/TerminalNode.js.map +1 -0
  46. package/dist/components/builder/TriggerConfigPanel.d.ts +10 -0
  47. package/dist/components/builder/TriggerConfigPanel.d.ts.map +1 -0
  48. package/dist/components/builder/TriggerConfigPanel.js +49 -0
  49. package/dist/components/builder/TriggerConfigPanel.js.map +1 -0
  50. package/dist/components/builder/TriggerNode.d.ts +9 -0
  51. package/dist/components/builder/TriggerNode.d.ts.map +1 -0
  52. package/dist/components/builder/TriggerNode.js +30 -0
  53. package/dist/components/builder/TriggerNode.js.map +1 -0
  54. package/dist/components/builder/TriggerPicker.d.ts +8 -0
  55. package/dist/components/builder/TriggerPicker.d.ts.map +1 -0
  56. package/dist/components/builder/TriggerPicker.js +61 -0
  57. package/dist/components/builder/TriggerPicker.js.map +1 -0
  58. package/dist/components/builder/WorkflowBuilder.d.ts +20 -0
  59. package/dist/components/builder/WorkflowBuilder.d.ts.map +1 -0
  60. package/dist/components/builder/WorkflowBuilder.js +157 -0
  61. package/dist/components/builder/WorkflowBuilder.js.map +1 -0
  62. package/dist/components/builder/edge-types.d.ts +3 -0
  63. package/dist/components/builder/edge-types.d.ts.map +1 -0
  64. package/dist/components/builder/edge-types.js +5 -0
  65. package/dist/components/builder/edge-types.js.map +1 -0
  66. package/dist/components/builder/icons.d.ts +25 -0
  67. package/dist/components/builder/icons.d.ts.map +1 -0
  68. package/dist/components/builder/icons.js +43 -0
  69. package/dist/components/builder/icons.js.map +1 -0
  70. package/dist/components/builder/layout-engine.d.ts +44 -0
  71. package/dist/components/builder/layout-engine.d.ts.map +1 -0
  72. package/dist/components/builder/layout-engine.js +216 -0
  73. package/dist/components/builder/layout-engine.js.map +1 -0
  74. package/dist/components/builder/node-types.d.ts +3 -0
  75. package/dist/components/builder/node-types.d.ts.map +1 -0
  76. package/dist/components/builder/node-types.js +11 -0
  77. package/dist/components/builder/node-types.js.map +1 -0
  78. package/dist/components/builder/theme.d.ts +28 -0
  79. package/dist/components/builder/theme.d.ts.map +1 -0
  80. package/dist/components/builder/theme.js +63 -0
  81. package/dist/components/builder/theme.js.map +1 -0
  82. package/dist/components/builder/v2/AddStepButton.d.ts +6 -0
  83. package/dist/components/builder/v2/AddStepButton.d.ts.map +1 -0
  84. package/dist/components/builder/v2/AddStepButton.js +6 -0
  85. package/dist/components/builder/v2/AddStepButton.js.map +1 -0
  86. package/dist/components/builder/v2/BranchEdge.d.ts +3 -0
  87. package/dist/components/builder/v2/BranchEdge.d.ts.map +1 -0
  88. package/dist/components/builder/v2/BranchEdge.js +46 -0
  89. package/dist/components/builder/v2/BranchEdge.js.map +1 -0
  90. package/dist/components/builder/v2/LoopBodyEdge.d.ts +7 -0
  91. package/dist/components/builder/v2/LoopBodyEdge.d.ts.map +1 -0
  92. package/dist/components/builder/v2/LoopBodyEdge.js +19 -0
  93. package/dist/components/builder/v2/LoopBodyEdge.js.map +1 -0
  94. package/dist/components/builder/v2/LoopbackEdge.d.ts +10 -0
  95. package/dist/components/builder/v2/LoopbackEdge.d.ts.map +1 -0
  96. package/dist/components/builder/v2/LoopbackEdge.js +26 -0
  97. package/dist/components/builder/v2/LoopbackEdge.js.map +1 -0
  98. package/dist/components/builder/v2/StepNode.d.ts +21 -0
  99. package/dist/components/builder/v2/StepNode.d.ts.map +1 -0
  100. package/dist/components/builder/v2/StepNode.js +36 -0
  101. package/dist/components/builder/v2/StepNode.js.map +1 -0
  102. package/dist/components/builder/v2/StepPicker.d.ts +8 -0
  103. package/dist/components/builder/v2/StepPicker.d.ts.map +1 -0
  104. package/dist/components/builder/v2/StepPicker.js +73 -0
  105. package/dist/components/builder/v2/StepPicker.js.map +1 -0
  106. package/dist/components/builder/v2/TerminalNode.d.ts +6 -0
  107. package/dist/components/builder/v2/TerminalNode.d.ts.map +1 -0
  108. package/dist/components/builder/v2/TerminalNode.js +7 -0
  109. package/dist/components/builder/v2/TerminalNode.js.map +1 -0
  110. package/dist/components/builder/v2/TriggerNode.d.ts +10 -0
  111. package/dist/components/builder/v2/TriggerNode.d.ts.map +1 -0
  112. package/dist/components/builder/v2/TriggerNode.js +20 -0
  113. package/dist/components/builder/v2/TriggerNode.js.map +1 -0
  114. package/dist/components/builder/v2/TriggerPicker.d.ts +7 -0
  115. package/dist/components/builder/v2/TriggerPicker.d.ts.map +1 -0
  116. package/dist/components/builder/v2/TriggerPicker.js +45 -0
  117. package/dist/components/builder/v2/TriggerPicker.js.map +1 -0
  118. package/dist/components/builder/v2/WorkflowBuilder.d.ts +14 -0
  119. package/dist/components/builder/v2/WorkflowBuilder.d.ts.map +1 -0
  120. package/dist/components/builder/v2/WorkflowBuilder.js +189 -0
  121. package/dist/components/builder/v2/WorkflowBuilder.js.map +1 -0
  122. package/dist/components/builder/v2/edge-types.d.ts +3 -0
  123. package/dist/components/builder/v2/edge-types.d.ts.map +1 -0
  124. package/dist/components/builder/v2/edge-types.js +9 -0
  125. package/dist/components/builder/v2/edge-types.js.map +1 -0
  126. package/dist/components/builder/v2/icons.d.ts +25 -0
  127. package/dist/components/builder/v2/icons.d.ts.map +1 -0
  128. package/dist/components/builder/v2/icons.js +43 -0
  129. package/dist/components/builder/v2/icons.js.map +1 -0
  130. package/dist/components/builder/v2/layout-engine.d.ts +76 -0
  131. package/dist/components/builder/v2/layout-engine.d.ts.map +1 -0
  132. package/dist/components/builder/v2/layout-engine.js +465 -0
  133. package/dist/components/builder/v2/layout-engine.js.map +1 -0
  134. package/dist/components/builder/v2/node-types.d.ts +3 -0
  135. package/dist/components/builder/v2/node-types.d.ts.map +1 -0
  136. package/dist/components/builder/v2/node-types.js +11 -0
  137. package/dist/components/builder/v2/node-types.js.map +1 -0
  138. package/dist/components/builder/v2/theme.d.ts +28 -0
  139. package/dist/components/builder/v2/theme.d.ts.map +1 -0
  140. package/dist/components/builder/v2/theme.js +63 -0
  141. package/dist/components/builder/v2/theme.js.map +1 -0
  142. package/dist/components/builder/v3/BranchContainer.d.ts +17 -0
  143. package/dist/components/builder/v3/BranchContainer.d.ts.map +1 -0
  144. package/dist/components/builder/v3/BranchContainer.js +64 -0
  145. package/dist/components/builder/v3/BranchContainer.js.map +1 -0
  146. package/dist/components/builder/v3/BuilderToolbar.d.ts +11 -0
  147. package/dist/components/builder/v3/BuilderToolbar.d.ts.map +1 -0
  148. package/dist/components/builder/v3/BuilderToolbar.js +14 -0
  149. package/dist/components/builder/v3/BuilderToolbar.js.map +1 -0
  150. package/dist/components/builder/v3/CodeEditor.d.ts +10 -0
  151. package/dist/components/builder/v3/CodeEditor.d.ts.map +1 -0
  152. package/dist/components/builder/v3/CodeEditor.js +117 -0
  153. package/dist/components/builder/v3/CodeEditor.js.map +1 -0
  154. package/dist/components/builder/v3/ConditionEditorPanel.d.ts +10 -0
  155. package/dist/components/builder/v3/ConditionEditorPanel.d.ts.map +1 -0
  156. package/dist/components/builder/v3/ConditionEditorPanel.js +54 -0
  157. package/dist/components/builder/v3/ConditionEditorPanel.js.map +1 -0
  158. package/dist/components/builder/v3/Connector.d.ts +7 -0
  159. package/dist/components/builder/v3/Connector.d.ts.map +1 -0
  160. package/dist/components/builder/v3/Connector.js +9 -0
  161. package/dist/components/builder/v3/Connector.js.map +1 -0
  162. package/dist/components/builder/v3/DiscriminatedUnionEditor.d.ts +14 -0
  163. package/dist/components/builder/v3/DiscriminatedUnionEditor.d.ts.map +1 -0
  164. package/dist/components/builder/v3/DiscriminatedUnionEditor.js +69 -0
  165. package/dist/components/builder/v3/DiscriminatedUnionEditor.js.map +1 -0
  166. package/dist/components/builder/v3/EnhancedSchemaFormRenderer.d.ts +13 -0
  167. package/dist/components/builder/v3/EnhancedSchemaFormRenderer.d.ts.map +1 -0
  168. package/dist/components/builder/v3/EnhancedSchemaFormRenderer.js +231 -0
  169. package/dist/components/builder/v3/EnhancedSchemaFormRenderer.js.map +1 -0
  170. package/dist/components/builder/v3/InputSchemaBuilder.d.ts +7 -0
  171. package/dist/components/builder/v3/InputSchemaBuilder.d.ts.map +1 -0
  172. package/dist/components/builder/v3/InputSchemaBuilder.js +62 -0
  173. package/dist/components/builder/v3/InputSchemaBuilder.js.map +1 -0
  174. package/dist/components/builder/v3/KeyValueEditor.d.ts +12 -0
  175. package/dist/components/builder/v3/KeyValueEditor.d.ts.map +1 -0
  176. package/dist/components/builder/v3/KeyValueEditor.js +45 -0
  177. package/dist/components/builder/v3/KeyValueEditor.js.map +1 -0
  178. package/dist/components/builder/v3/LoopContainer.d.ts +9 -0
  179. package/dist/components/builder/v3/LoopContainer.d.ts.map +1 -0
  180. package/dist/components/builder/v3/LoopContainer.js +8 -0
  181. package/dist/components/builder/v3/LoopContainer.js.map +1 -0
  182. package/dist/components/builder/v3/MultiSelectCheckboxes.d.ts +8 -0
  183. package/dist/components/builder/v3/MultiSelectCheckboxes.d.ts.map +1 -0
  184. package/dist/components/builder/v3/MultiSelectCheckboxes.js +28 -0
  185. package/dist/components/builder/v3/MultiSelectCheckboxes.js.map +1 -0
  186. package/dist/components/builder/v3/OutputFieldsEditor.d.ts +12 -0
  187. package/dist/components/builder/v3/OutputFieldsEditor.d.ts.map +1 -0
  188. package/dist/components/builder/v3/OutputFieldsEditor.js +20 -0
  189. package/dist/components/builder/v3/OutputFieldsEditor.js.map +1 -0
  190. package/dist/components/builder/v3/SidePanel.d.ts +28 -0
  191. package/dist/components/builder/v3/SidePanel.d.ts.map +1 -0
  192. package/dist/components/builder/v3/SidePanel.js +13 -0
  193. package/dist/components/builder/v3/SidePanel.js.map +1 -0
  194. package/dist/components/builder/v3/StepConfigPanel.d.ts +14 -0
  195. package/dist/components/builder/v3/StepConfigPanel.d.ts.map +1 -0
  196. package/dist/components/builder/v3/StepConfigPanel.js +48 -0
  197. package/dist/components/builder/v3/StepConfigPanel.js.map +1 -0
  198. package/dist/components/builder/v3/StepNode.d.ts +18 -0
  199. package/dist/components/builder/v3/StepNode.d.ts.map +1 -0
  200. package/dist/components/builder/v3/StepNode.js +34 -0
  201. package/dist/components/builder/v3/StepNode.js.map +1 -0
  202. package/dist/components/builder/v3/StepPicker.d.ts +15 -0
  203. package/dist/components/builder/v3/StepPicker.d.ts.map +1 -0
  204. package/dist/components/builder/v3/StepPicker.js +71 -0
  205. package/dist/components/builder/v3/StepPicker.js.map +1 -0
  206. package/dist/components/builder/v3/StringArrayInput.d.ts +8 -0
  207. package/dist/components/builder/v3/StringArrayInput.d.ts.map +1 -0
  208. package/dist/components/builder/v3/StringArrayInput.js +28 -0
  209. package/dist/components/builder/v3/StringArrayInput.js.map +1 -0
  210. package/dist/components/builder/v3/SwitchCaseEditor.d.ts +15 -0
  211. package/dist/components/builder/v3/SwitchCaseEditor.d.ts.map +1 -0
  212. package/dist/components/builder/v3/SwitchCaseEditor.js +37 -0
  213. package/dist/components/builder/v3/SwitchCaseEditor.js.map +1 -0
  214. package/dist/components/builder/v3/TerminalNode.d.ts +2 -0
  215. package/dist/components/builder/v3/TerminalNode.d.ts.map +1 -0
  216. package/dist/components/builder/v3/TerminalNode.js +5 -0
  217. package/dist/components/builder/v3/TerminalNode.js.map +1 -0
  218. package/dist/components/builder/v3/TriggerConfigPanel.d.ts +11 -0
  219. package/dist/components/builder/v3/TriggerConfigPanel.d.ts.map +1 -0
  220. package/dist/components/builder/v3/TriggerConfigPanel.js +15 -0
  221. package/dist/components/builder/v3/TriggerConfigPanel.js.map +1 -0
  222. package/dist/components/builder/v3/TriggerNode.d.ts +9 -0
  223. package/dist/components/builder/v3/TriggerNode.d.ts.map +1 -0
  224. package/dist/components/builder/v3/TriggerNode.js +13 -0
  225. package/dist/components/builder/v3/TriggerNode.js.map +1 -0
  226. package/dist/components/builder/v3/TriggerPicker.d.ts +7 -0
  227. package/dist/components/builder/v3/TriggerPicker.d.ts.map +1 -0
  228. package/dist/components/builder/v3/TriggerPicker.js +43 -0
  229. package/dist/components/builder/v3/TriggerPicker.js.map +1 -0
  230. package/dist/components/builder/v3/VariablePickerPopover.d.ts +9 -0
  231. package/dist/components/builder/v3/VariablePickerPopover.d.ts.map +1 -0
  232. package/dist/components/builder/v3/VariablePickerPopover.js +78 -0
  233. package/dist/components/builder/v3/VariablePickerPopover.js.map +1 -0
  234. package/dist/components/builder/v3/VariableRefInput.d.ts +14 -0
  235. package/dist/components/builder/v3/VariableRefInput.d.ts.map +1 -0
  236. package/dist/components/builder/v3/VariableRefInput.js +88 -0
  237. package/dist/components/builder/v3/VariableRefInput.js.map +1 -0
  238. package/dist/components/builder/v3/WorkflowBuilderV3.d.ts +13 -0
  239. package/dist/components/builder/v3/WorkflowBuilderV3.d.ts.map +1 -0
  240. package/dist/components/builder/v3/WorkflowBuilderV3.js +124 -0
  241. package/dist/components/builder/v3/WorkflowBuilderV3.js.map +1 -0
  242. package/dist/components/builder/v3/WorkflowCanvas.d.ts +26 -0
  243. package/dist/components/builder/v3/WorkflowCanvas.d.ts.map +1 -0
  244. package/dist/components/builder/v3/WorkflowCanvas.js +25 -0
  245. package/dist/components/builder/v3/WorkflowCanvas.js.map +1 -0
  246. package/dist/components/builder/v3/WorkflowTree.d.ts +22 -0
  247. package/dist/components/builder/v3/WorkflowTree.d.ts.map +1 -0
  248. package/dist/components/builder/v3/WorkflowTree.js +70 -0
  249. package/dist/components/builder/v3/WorkflowTree.js.map +1 -0
  250. package/dist/components/dashboard/TriggerFormModal.d.ts +16 -0
  251. package/dist/components/dashboard/TriggerFormModal.d.ts.map +1 -0
  252. package/dist/components/dashboard/TriggerFormModal.js +160 -0
  253. package/dist/components/dashboard/TriggerFormModal.js.map +1 -0
  254. package/dist/components/dashboard/WorkflowDashboard.d.ts +19 -0
  255. package/dist/components/dashboard/WorkflowDashboard.d.ts.map +1 -0
  256. package/dist/components/dashboard/WorkflowDashboard.js +48 -0
  257. package/dist/components/dashboard/WorkflowDashboard.js.map +1 -0
  258. package/dist/components/execution/ExecutionEdge.d.ts +4 -0
  259. package/dist/components/execution/ExecutionEdge.d.ts.map +1 -0
  260. package/dist/components/execution/ExecutionEdge.js +27 -0
  261. package/dist/components/execution/ExecutionEdge.js.map +1 -0
  262. package/dist/components/execution/ExecutionHeader.d.ts +9 -0
  263. package/dist/components/execution/ExecutionHeader.d.ts.map +1 -0
  264. package/dist/components/execution/ExecutionHeader.js +22 -0
  265. package/dist/components/execution/ExecutionHeader.js.map +1 -0
  266. package/dist/components/execution/ExecutionStepNode.d.ts +14 -0
  267. package/dist/components/execution/ExecutionStepNode.d.ts.map +1 -0
  268. package/dist/components/execution/ExecutionStepNode.js +47 -0
  269. package/dist/components/execution/ExecutionStepNode.js.map +1 -0
  270. package/dist/components/execution/ExecutionTree.d.ts +12 -0
  271. package/dist/components/execution/ExecutionTree.d.ts.map +1 -0
  272. package/dist/components/execution/ExecutionTree.js +65 -0
  273. package/dist/components/execution/ExecutionTree.js.map +1 -0
  274. package/dist/components/execution/ExecutionTriggerNode.d.ts +9 -0
  275. package/dist/components/execution/ExecutionTriggerNode.d.ts.map +1 -0
  276. package/dist/components/execution/ExecutionTriggerNode.js +15 -0
  277. package/dist/components/execution/ExecutionTriggerNode.js.map +1 -0
  278. package/dist/components/execution/ExecutionViewer.d.ts +21 -0
  279. package/dist/components/execution/ExecutionViewer.d.ts.map +1 -0
  280. package/dist/components/execution/ExecutionViewer.js +194 -0
  281. package/dist/components/execution/ExecutionViewer.js.map +1 -0
  282. package/dist/components/execution/PauseFormRenderer.d.ts +11 -0
  283. package/dist/components/execution/PauseFormRenderer.d.ts.map +1 -0
  284. package/dist/components/execution/PauseFormRenderer.js +48 -0
  285. package/dist/components/execution/PauseFormRenderer.js.map +1 -0
  286. package/dist/components/execution/PauseInteractionPanel.d.ts +9 -0
  287. package/dist/components/execution/PauseInteractionPanel.d.ts.map +1 -0
  288. package/dist/components/execution/PauseInteractionPanel.js +46 -0
  289. package/dist/components/execution/PauseInteractionPanel.js.map +1 -0
  290. package/dist/components/execution/RerunDialog.d.ts +34 -0
  291. package/dist/components/execution/RerunDialog.d.ts.map +1 -0
  292. package/dist/components/execution/RerunDialog.js +97 -0
  293. package/dist/components/execution/RerunDialog.js.map +1 -0
  294. package/dist/components/execution/SchemaAwareRenderer.d.ts +7 -0
  295. package/dist/components/execution/SchemaAwareRenderer.d.ts.map +1 -0
  296. package/dist/components/execution/SchemaAwareRenderer.js +116 -0
  297. package/dist/components/execution/SchemaAwareRenderer.js.map +1 -0
  298. package/dist/components/execution/StepDetailPanel.d.ts +22 -0
  299. package/dist/components/execution/StepDetailPanel.d.ts.map +1 -0
  300. package/dist/components/execution/StepDetailPanel.js +144 -0
  301. package/dist/components/execution/StepDetailPanel.js.map +1 -0
  302. package/dist/components/execution/ValueEditor.d.ts +39 -0
  303. package/dist/components/execution/ValueEditor.d.ts.map +1 -0
  304. package/dist/components/execution/ValueEditor.js +191 -0
  305. package/dist/components/execution/ValueEditor.js.map +1 -0
  306. package/dist/components/execution/execution-layout.d.ts +31 -0
  307. package/dist/components/execution/execution-layout.d.ts.map +1 -0
  308. package/dist/components/execution/execution-layout.js +90 -0
  309. package/dist/components/execution/execution-layout.js.map +1 -0
  310. package/dist/components/index.d.ts +58 -0
  311. package/dist/components/index.d.ts.map +1 -0
  312. package/dist/components/index.js +40 -0
  313. package/dist/components/index.js.map +1 -0
  314. package/dist/components/layout/AppShell.d.ts +8 -0
  315. package/dist/components/layout/AppShell.d.ts.map +1 -0
  316. package/dist/components/layout/AppShell.js +10 -0
  317. package/dist/components/layout/AppShell.js.map +1 -0
  318. package/dist/components/layout/Breadcrumb.d.ts +10 -0
  319. package/dist/components/layout/Breadcrumb.d.ts.map +1 -0
  320. package/dist/components/layout/Breadcrumb.js +33 -0
  321. package/dist/components/layout/Breadcrumb.js.map +1 -0
  322. package/dist/components/layout/PageHeader.d.ts +10 -0
  323. package/dist/components/layout/PageHeader.d.ts.map +1 -0
  324. package/dist/components/layout/PageHeader.js +10 -0
  325. package/dist/components/layout/PageHeader.js.map +1 -0
  326. package/dist/components/layout/Sidebar.d.ts +15 -0
  327. package/dist/components/layout/Sidebar.d.ts.map +1 -0
  328. package/dist/components/layout/Sidebar.js +30 -0
  329. package/dist/components/layout/Sidebar.js.map +1 -0
  330. package/dist/components/provider/WorkflowUIProvider.d.ts +18 -0
  331. package/dist/components/provider/WorkflowUIProvider.d.ts.map +1 -0
  332. package/dist/components/provider/WorkflowUIProvider.js +34 -0
  333. package/dist/components/provider/WorkflowUIProvider.js.map +1 -0
  334. package/dist/components/provider/slot-resolution.d.ts +13 -0
  335. package/dist/components/provider/slot-resolution.d.ts.map +1 -0
  336. package/dist/components/provider/slot-resolution.js +21 -0
  337. package/dist/components/provider/slot-resolution.js.map +1 -0
  338. package/dist/components/provider/workflow-ui-context.d.ts +30 -0
  339. package/dist/components/provider/workflow-ui-context.d.ts.map +1 -0
  340. package/dist/components/provider/workflow-ui-context.js +14 -0
  341. package/dist/components/provider/workflow-ui-context.js.map +1 -0
  342. package/dist/components/runs/RunsFilters.d.ts +7 -0
  343. package/dist/components/runs/RunsFilters.d.ts.map +1 -0
  344. package/dist/components/runs/RunsFilters.js +14 -0
  345. package/dist/components/runs/RunsFilters.js.map +1 -0
  346. package/dist/components/runs/RunsTable.d.ts +8 -0
  347. package/dist/components/runs/RunsTable.d.ts.map +1 -0
  348. package/dist/components/runs/RunsTable.js +96 -0
  349. package/dist/components/runs/RunsTable.js.map +1 -0
  350. package/dist/components/runs/RunsView.d.ts +12 -0
  351. package/dist/components/runs/RunsView.d.ts.map +1 -0
  352. package/dist/components/runs/RunsView.js +18 -0
  353. package/dist/components/runs/RunsView.js.map +1 -0
  354. package/dist/components/schema-form/SchemaFormRenderer.d.ts +19 -0
  355. package/dist/components/schema-form/SchemaFormRenderer.d.ts.map +1 -0
  356. package/dist/components/schema-form/SchemaFormRenderer.js +80 -0
  357. package/dist/components/schema-form/SchemaFormRenderer.js.map +1 -0
  358. package/dist/components/shared/EmptyState.d.ts +9 -0
  359. package/dist/components/shared/EmptyState.d.ts.map +1 -0
  360. package/dist/components/shared/EmptyState.js +7 -0
  361. package/dist/components/shared/EmptyState.js.map +1 -0
  362. package/dist/components/shared/ErrorBoundary.d.ts +16 -0
  363. package/dist/components/shared/ErrorBoundary.d.ts.map +1 -0
  364. package/dist/components/shared/ErrorBoundary.js +19 -0
  365. package/dist/components/shared/ErrorBoundary.js.map +1 -0
  366. package/dist/components/shared/LoadingSpinner.d.ts +6 -0
  367. package/dist/components/shared/LoadingSpinner.d.ts.map +1 -0
  368. package/dist/components/shared/LoadingSpinner.js +11 -0
  369. package/dist/components/shared/LoadingSpinner.js.map +1 -0
  370. package/dist/components/shared/StatusBadge.d.ts +8 -0
  371. package/dist/components/shared/StatusBadge.d.ts.map +1 -0
  372. package/dist/components/shared/StatusBadge.js +25 -0
  373. package/dist/components/shared/StatusBadge.js.map +1 -0
  374. package/dist/components/shared/cn.d.ts +9 -0
  375. package/dist/components/shared/cn.d.ts.map +1 -0
  376. package/dist/components/shared/cn.js +12 -0
  377. package/dist/components/shared/cn.js.map +1 -0
  378. package/dist/hooks/index.d.ts +34 -0
  379. package/dist/hooks/index.d.ts.map +1 -0
  380. package/dist/hooks/index.js +25 -0
  381. package/dist/hooks/index.js.map +1 -0
  382. package/dist/hooks/use-condition-editor.d.ts +18 -0
  383. package/dist/hooks/use-condition-editor.d.ts.map +1 -0
  384. package/dist/hooks/use-condition-editor.js +115 -0
  385. package/dist/hooks/use-condition-editor.js.map +1 -0
  386. package/dist/hooks/use-execution-rerun.d.ts +26 -0
  387. package/dist/hooks/use-execution-rerun.d.ts.map +1 -0
  388. package/dist/hooks/use-execution-rerun.js +40 -0
  389. package/dist/hooks/use-execution-rerun.js.map +1 -0
  390. package/dist/hooks/use-execution-viewer.d.ts +33 -0
  391. package/dist/hooks/use-execution-viewer.d.ts.map +1 -0
  392. package/dist/hooks/use-execution-viewer.js +380 -0
  393. package/dist/hooks/use-execution-viewer.js.map +1 -0
  394. package/dist/hooks/use-pause-interaction.d.ts +13 -0
  395. package/dist/hooks/use-pause-interaction.d.ts.map +1 -0
  396. package/dist/hooks/use-pause-interaction.js +72 -0
  397. package/dist/hooks/use-pause-interaction.js.map +1 -0
  398. package/dist/hooks/use-runs-list.d.ts +20 -0
  399. package/dist/hooks/use-runs-list.d.ts.map +1 -0
  400. package/dist/hooks/use-runs-list.js +89 -0
  401. package/dist/hooks/use-runs-list.js.map +1 -0
  402. package/dist/hooks/use-schema-form.d.ts +47 -0
  403. package/dist/hooks/use-schema-form.d.ts.map +1 -0
  404. package/dist/hooks/use-schema-form.js +247 -0
  405. package/dist/hooks/use-schema-form.js.map +1 -0
  406. package/dist/hooks/use-step-config.d.ts +13 -0
  407. package/dist/hooks/use-step-config.d.ts.map +1 -0
  408. package/dist/hooks/use-step-config.js +40 -0
  409. package/dist/hooks/use-step-config.js.map +1 -0
  410. package/dist/hooks/use-step-metadata.d.ts +37 -0
  411. package/dist/hooks/use-step-metadata.d.ts.map +1 -0
  412. package/dist/hooks/use-step-metadata.js +113 -0
  413. package/dist/hooks/use-step-metadata.js.map +1 -0
  414. package/dist/hooks/use-trigger-config.d.ts +13 -0
  415. package/dist/hooks/use-trigger-config.d.ts.map +1 -0
  416. package/dist/hooks/use-trigger-config.js +40 -0
  417. package/dist/hooks/use-trigger-config.js.map +1 -0
  418. package/dist/hooks/use-undo-redo.d.ts +17 -0
  419. package/dist/hooks/use-undo-redo.d.ts.map +1 -0
  420. package/dist/hooks/use-undo-redo.js +58 -0
  421. package/dist/hooks/use-undo-redo.js.map +1 -0
  422. package/dist/hooks/use-variable-picker.d.ts +26 -0
  423. package/dist/hooks/use-variable-picker.d.ts.map +1 -0
  424. package/dist/hooks/use-variable-picker.js +132 -0
  425. package/dist/hooks/use-variable-picker.js.map +1 -0
  426. package/dist/hooks/use-workflow-builder.d.ts +47 -0
  427. package/dist/hooks/use-workflow-builder.d.ts.map +1 -0
  428. package/dist/hooks/use-workflow-builder.js +374 -0
  429. package/dist/hooks/use-workflow-builder.js.map +1 -0
  430. package/dist/hooks/use-workflow-client.d.ts +8 -0
  431. package/dist/hooks/use-workflow-client.d.ts.map +1 -0
  432. package/dist/hooks/use-workflow-client.js +15 -0
  433. package/dist/hooks/use-workflow-client.js.map +1 -0
  434. package/dist/hooks/use-workflow-list.d.ts +11 -0
  435. package/dist/hooks/use-workflow-list.d.ts.map +1 -0
  436. package/dist/hooks/use-workflow-list.js +43 -0
  437. package/dist/hooks/use-workflow-list.js.map +1 -0
  438. package/dist/index.d.ts +24 -0
  439. package/dist/index.d.ts.map +1 -0
  440. package/dist/index.js +41 -0
  441. package/dist/index.js.map +1 -0
  442. package/dist/styles.css +117 -0
  443. package/dist/test-setup.d.ts +2 -0
  444. package/dist/test-setup.d.ts.map +1 -0
  445. package/dist/test-setup.js +2 -0
  446. package/dist/test-setup.js.map +1 -0
  447. package/dist/types/index.d.ts +2 -0
  448. package/dist/types/index.d.ts.map +1 -0
  449. package/dist/types/index.js +2 -0
  450. package/dist/types/index.js.map +1 -0
  451. package/dist/types/slots.d.ts +18 -0
  452. package/dist/types/slots.d.ts.map +1 -0
  453. package/dist/types/slots.js +2 -0
  454. package/dist/types/slots.js.map +1 -0
  455. package/dist/utils/branch-detection.d.ts +83 -0
  456. package/dist/utils/branch-detection.d.ts.map +1 -0
  457. package/dist/utils/branch-detection.js +247 -0
  458. package/dist/utils/branch-detection.js.map +1 -0
  459. package/package.json +72 -0
@@ -0,0 +1,58 @@
1
+ import { useCallback, useRef, useState } from 'react';
2
+ /**
3
+ * Generic undo/redo stack for immutable state values.
4
+ *
5
+ * Every call to `setState` pushes to the history stack.
6
+ * `undo()` / `redo()` navigate the stack without mutating it.
7
+ */
8
+ export function useUndoRedo(initialState, maxHistory = 50) {
9
+ const [state, setStateInternal] = useState(initialState);
10
+ const pastRef = useRef([]);
11
+ const futureRef = useRef([]);
12
+ const setState = useCallback((next) => {
13
+ setStateInternal((prev) => {
14
+ const past = pastRef.current;
15
+ past.push(prev);
16
+ if (past.length > maxHistory) {
17
+ past.shift();
18
+ }
19
+ futureRef.current = [];
20
+ return typeof next === 'function' ? next(prev) : next;
21
+ });
22
+ }, [maxHistory]);
23
+ const undo = useCallback(() => {
24
+ setStateInternal((current) => {
25
+ const past = pastRef.current;
26
+ if (past.length === 0)
27
+ return current;
28
+ const previous = past.pop();
29
+ futureRef.current.push(current);
30
+ return previous;
31
+ });
32
+ }, []);
33
+ const redo = useCallback(() => {
34
+ setStateInternal((current) => {
35
+ const future = futureRef.current;
36
+ if (future.length === 0)
37
+ return current;
38
+ const next = future.pop();
39
+ pastRef.current.push(current);
40
+ return next;
41
+ });
42
+ }, []);
43
+ const reset = useCallback((initial) => {
44
+ pastRef.current = [];
45
+ futureRef.current = [];
46
+ setStateInternal(initial);
47
+ }, []);
48
+ return {
49
+ state,
50
+ setState,
51
+ undo,
52
+ redo,
53
+ canUndo: pastRef.current.length > 0,
54
+ canRedo: futureRef.current.length > 0,
55
+ reset,
56
+ };
57
+ }
58
+ //# sourceMappingURL=use-undo-redo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-undo-redo.js","sourceRoot":"","sources":["../../src/hooks/use-undo-redo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAYtD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAI,YAAe,EAAE,UAAU,GAAG,EAAE;IAC7D,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAM,EAAE,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,MAAM,CAAM,EAAE,CAAC,CAAC;IAElC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,IAA0B,EAAE,EAAE;QAC1D,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;YACD,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;YACvB,OAAO,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAE,IAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAG,CAAC;YAC7B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;YACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAG,CAAC;YAC3B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,OAAU,EAAE,EAAE;QACvC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QACrB,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;QACvB,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,KAAK;QACL,QAAQ;QACR,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACnC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACrC,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { WorkflowConfig } from '@xyne/workflow-sdk/builder';
2
+ export interface VariableNode {
3
+ path: string;
4
+ label: string;
5
+ schemaType: string;
6
+ children: VariableNode[];
7
+ isLeaf: boolean;
8
+ refString: string;
9
+ }
10
+ export interface UseVariablePickerOptions {
11
+ config: WorkflowConfig;
12
+ atStepId: string;
13
+ filterType?: string;
14
+ enabled?: boolean;
15
+ /** Map of step ID → human-readable name (e.g. "agent_analysis" → "Code"). Built from step metadata. */
16
+ stepLabelMap?: Map<string, string>;
17
+ }
18
+ export interface UseVariablePickerReturn {
19
+ variables: VariableNode[];
20
+ flatPaths: VariableNode[];
21
+ isLoading: boolean;
22
+ error: Error | null;
23
+ search: (query: string) => VariableNode[];
24
+ }
25
+ export declare function useVariablePicker(opts: UseVariablePickerOptions): UseVariablePickerReturn;
26
+ //# sourceMappingURL=use-variable-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-variable-picker.d.ts","sourceRoot":"","sources":["../../src/hooks/use-variable-picker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKjE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6FD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uGAAuG;IACvG,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,EAAE,CAAC;CAC3C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,uBAAuB,CAuDzF"}
@@ -0,0 +1,132 @@
1
+ import { useCallback, useEffect, useMemo, useState } from 'react';
2
+ import { useWorkflowClient } from './use-workflow-client.js';
3
+ // ─── JSON Schema → tree ───
4
+ function schemaToTree(contextMap, labelMap) {
5
+ const roots = [];
6
+ for (const [path, schema] of Object.entries(contextMap)) {
7
+ const displayLabel = resolveRootLabel(path, labelMap);
8
+ const rootNode = buildNodeFromSchema(path, displayLabel, schema);
9
+ roots.push(rootNode);
10
+ }
11
+ return roots;
12
+ }
13
+ /**
14
+ * Resolve a root-level context path to a human-readable label.
15
+ *
16
+ * Context paths look like:
17
+ * "trigger" → "Trigger"
18
+ * "steps.agent_analysis.output" → "Code (agent_analysis)" if labelMap has the mapping
19
+ *
20
+ * The refString stays as the raw path; only the display label changes.
21
+ */
22
+ function resolveRootLabel(path, labelMap) {
23
+ if (path === 'trigger')
24
+ return 'Trigger';
25
+ // Extract step ID from "steps.<stepId>.output" pattern
26
+ const match = path.match(/^steps\.([^.]+)/);
27
+ if (match) {
28
+ const stepId = match[1];
29
+ const stepName = labelMap?.get(stepId);
30
+ if (stepName)
31
+ return `${stepName} (${stepId})`;
32
+ return stepId;
33
+ }
34
+ return path;
35
+ }
36
+ function buildNodeFromSchema(path, label, schema) {
37
+ const type = schema['type'] ?? 'unknown';
38
+ const children = [];
39
+ if (type === 'object' && schema['properties']) {
40
+ const props = schema['properties'];
41
+ for (const [key, propSchema] of Object.entries(props)) {
42
+ children.push(buildNodeFromSchema(`${path}.${key}`, key, propSchema));
43
+ }
44
+ }
45
+ return {
46
+ path,
47
+ label,
48
+ schemaType: type,
49
+ children,
50
+ isLeaf: children.length === 0,
51
+ refString: `{{${path}}}`,
52
+ };
53
+ }
54
+ function flattenLeaves(nodes) {
55
+ const result = [];
56
+ for (const node of nodes) {
57
+ if (node.isLeaf) {
58
+ result.push(node);
59
+ }
60
+ else {
61
+ result.push(...flattenLeaves(node.children));
62
+ }
63
+ }
64
+ return result;
65
+ }
66
+ function searchNodes(nodes, query) {
67
+ const lower = query.toLowerCase();
68
+ return flattenLeaves(nodes).filter((n) => n.path.toLowerCase().includes(lower)
69
+ || n.label.toLowerCase().includes(lower)
70
+ || n.refString.toLowerCase().includes(lower));
71
+ }
72
+ export function useVariablePicker(opts) {
73
+ const { config, atStepId, filterType, enabled = true, stepLabelMap } = opts;
74
+ const client = useWorkflowClient();
75
+ const [contextMap, setContextMap] = useState(null);
76
+ const [isLoading, setIsLoading] = useState(false);
77
+ const [error, setError] = useState(null);
78
+ useEffect(() => {
79
+ if (!enabled || !atStepId)
80
+ return;
81
+ let cancelled = false;
82
+ setIsLoading(true);
83
+ setError(null);
84
+ void (async () => {
85
+ try {
86
+ const result = await client.schema.availableContext(config, atStepId);
87
+ if (!cancelled) {
88
+ setContextMap(result);
89
+ }
90
+ }
91
+ catch (err) {
92
+ if (!cancelled) {
93
+ setError(err instanceof Error ? err : new Error(String(err)));
94
+ }
95
+ }
96
+ finally {
97
+ if (!cancelled) {
98
+ setIsLoading(false);
99
+ }
100
+ }
101
+ })();
102
+ return () => { cancelled = true; };
103
+ }, [client, config, atStepId, enabled]);
104
+ const variables = useMemo(() => {
105
+ if (!contextMap)
106
+ return [];
107
+ let tree = schemaToTree(contextMap, stepLabelMap);
108
+ if (filterType) {
109
+ tree = tree.map((node) => filterByType(node, filterType)).filter(Boolean);
110
+ }
111
+ return tree;
112
+ }, [contextMap, filterType, stepLabelMap]);
113
+ const flatPaths = useMemo(() => flattenLeaves(variables), [variables]);
114
+ const search = useCallback((query) => {
115
+ if (!query)
116
+ return flatPaths;
117
+ return searchNodes(variables, query);
118
+ }, [variables, flatPaths]);
119
+ return { variables, flatPaths, isLoading, error, search };
120
+ }
121
+ function filterByType(node, type) {
122
+ if (node.isLeaf) {
123
+ return node.schemaType === type ? node : null;
124
+ }
125
+ const filtered = node.children
126
+ .map((child) => filterByType(child, type))
127
+ .filter(Boolean);
128
+ if (filtered.length === 0)
129
+ return null;
130
+ return { ...node, children: filtered };
131
+ }
132
+ //# sourceMappingURL=use-variable-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-variable-picker.js","sourceRoot":"","sources":["../../src/hooks/use-variable-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { WorkflowConfig, WorkflowStepConfig, WorkflowSettings } from '@xyne/workflow-sdk/builder';
2
+ import type { ValidationResult } from '@xyne/workflow-sdk';
3
+ export interface UseWorkflowBuilderOptions {
4
+ initialConfig?: WorkflowConfig;
5
+ onChange?: (config: WorkflowConfig) => void;
6
+ autoValidate?: boolean;
7
+ }
8
+ export interface UseWorkflowBuilderReturn {
9
+ config: WorkflowConfig;
10
+ selectedStepId: string | null;
11
+ isTriggerSelected: boolean;
12
+ isTriggerConfigured: boolean;
13
+ isDirty: boolean;
14
+ validation: ValidationResult | null;
15
+ isValidating: boolean;
16
+ addStep: (type: string, afterStepId?: string, inBranch?: {
17
+ stepId: string;
18
+ branchKey: string;
19
+ }) => string;
20
+ removeStep: (stepId: string) => void;
21
+ updateStepConfig: (stepId: string, config: Record<string, unknown>) => void;
22
+ renameStep: (stepId: string, name: string) => void;
23
+ duplicateStep: (stepId: string) => void;
24
+ toggleStepDisabled: (stepId: string) => void;
25
+ /** Add a named branch to a step's dynamic branch container (e.g. PARALLEL's branches). */
26
+ addBranch: (stepId: string, containerKey: string, branchName: string) => void;
27
+ /** Remove a named branch from a step's dynamic branch container. */
28
+ removeBranch: (stepId: string, containerKey: string, branchName: string) => void;
29
+ /** Rename a branch in a step's dynamic branch container. */
30
+ renameBranch: (stepId: string, containerKey: string, oldName: string, newName: string) => void;
31
+ setTrigger: (type: string, config?: Record<string, unknown>) => void;
32
+ updateTriggerConfig: (config: Record<string, unknown>) => void;
33
+ updateSettings: (settings: Partial<WorkflowSettings>) => void;
34
+ selectStep: (stepId: string | null) => void;
35
+ selectTrigger: () => void;
36
+ clearSelection: () => void;
37
+ undo: () => void;
38
+ redo: () => void;
39
+ canUndo: boolean;
40
+ canRedo: boolean;
41
+ validate: () => Promise<ValidationResult>;
42
+ loadConfig: (config: WorkflowConfig) => void;
43
+ reset: () => void;
44
+ getStep: (stepId: string) => WorkflowStepConfig | null;
45
+ }
46
+ export declare function useWorkflowBuilder(opts?: UseWorkflowBuilderOptions): UseWorkflowBuilderReturn;
47
+ //# sourceMappingURL=use-workflow-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-workflow-builder.d.ts","sourceRoot":"","sources":["../../src/hooks/use-workflow-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,374 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { useWorkflowClient } from './use-workflow-client.js';
3
+ import { useUndoRedo } from './use-undo-redo.js';
4
+ import { detectBranchesFromConfig, setAtPath, getAtPath, generateConfigDefaults, walkStepConfigs, } from '../utils/branch-detection.js';
5
+ // ─── Branch helpers (generic, config-driven) ───
6
+ function getBranches(step, cache) {
7
+ if (!step.config || typeof step.config !== 'object')
8
+ return {};
9
+ return detectBranchesFromConfig(step.config, cache.get(step.type));
10
+ }
11
+ /**
12
+ * Apply `mapper` to every detected branch inside `step`. Uses immutable
13
+ * `setAtPath` writes so arbitrary-depth paths (e.g. `cases.0.steps`) work.
14
+ */
15
+ function mapBranches(step, mapper, cache) {
16
+ const branches = getBranches(step, cache);
17
+ if (Object.keys(branches).length === 0)
18
+ return step;
19
+ let config = (step.config ?? {});
20
+ for (const [path, branch] of Object.entries(branches)) {
21
+ config = setAtPath(config, path, mapper(branch.steps));
22
+ }
23
+ return { ...step, config };
24
+ }
25
+ // ─── Step tree helpers ───
26
+ function generateStepId(type) {
27
+ const suffix = Math.random().toString(36).slice(2, 8);
28
+ return `${type.toLowerCase()}_${suffix}`;
29
+ }
30
+ function insertStepAfter(steps, afterId, newStep) {
31
+ if (!afterId)
32
+ return [newStep, ...steps];
33
+ const idx = steps.findIndex((s) => s.id === afterId);
34
+ if (idx === -1)
35
+ return [...steps, newStep];
36
+ const result = [...steps];
37
+ result.splice(idx + 1, 0, newStep);
38
+ return result;
39
+ }
40
+ function removeStepById(steps, targetId, cache) {
41
+ return steps
42
+ .filter((s) => s.id !== targetId)
43
+ .map((s) => mapBranches(s, (branch) => removeStepById(branch, targetId, cache), cache));
44
+ }
45
+ function updateStepInTree(steps, targetId, updater, cache) {
46
+ return steps.map((s) => {
47
+ if (s.id === targetId)
48
+ return updater(s);
49
+ return mapBranches(s, (branch) => updateStepInTree(branch, targetId, updater, cache), cache);
50
+ });
51
+ }
52
+ function findStepInTree(steps, targetId, cache) {
53
+ for (const step of steps) {
54
+ if (step.id === targetId)
55
+ return step;
56
+ const branches = getBranches(step, cache);
57
+ for (const branch of Object.values(branches)) {
58
+ const found = findStepInTree(branch.steps, targetId, cache);
59
+ if (found)
60
+ return found;
61
+ }
62
+ }
63
+ return null;
64
+ }
65
+ /**
66
+ * Insert a step into a specific branch of a control-flow step.
67
+ * Handles dotted keys: "body" for LOOP, "branches.A" for PARALLEL.
68
+ */
69
+ function insertIntoBranch(steps, branchStepId, branchKey, newStep, cache, afterStepId) {
70
+ return steps.map((s) => {
71
+ if (s.id === branchStepId && s.config && typeof s.config === 'object') {
72
+ const existing = getAtPath(s.config, branchKey);
73
+ const branch = (Array.isArray(existing) ? existing : []);
74
+ const config = setAtPath(s.config, branchKey, insertStepAfter(branch, afterStepId, newStep));
75
+ return { ...s, config };
76
+ }
77
+ return mapBranches(s, (branch) => insertIntoBranch(branch, branchStepId, branchKey, newStep, cache, afterStepId), cache);
78
+ });
79
+ }
80
+ // ─── Default config ───
81
+ function defaultConfig() {
82
+ return {
83
+ trigger: { type: 'MANUAL', config: {} },
84
+ steps: [],
85
+ };
86
+ }
87
+ export function useWorkflowBuilder(opts = {}) {
88
+ const { initialConfig, onChange, autoValidate = false } = opts;
89
+ const client = useWorkflowClient();
90
+ const initial = useMemo(() => initialConfig ?? defaultConfig(),
91
+ // Only use on first render
92
+ // eslint-disable-next-line react-hooks/exhaustive-deps
93
+ []);
94
+ const { state: config, setState: setConfig, undo, redo, canUndo, canRedo, reset: resetHistory, } = useUndoRedo(initial);
95
+ const [selectedStepId, setSelectedStepId] = useState(null);
96
+ const [isTriggerSelected, setIsTriggerSelected] = useState(false);
97
+ const [isTriggerConfigured, setIsTriggerConfigured] = useState(!!initialConfig?.trigger?.type);
98
+ const [validation, setValidation] = useState(null);
99
+ const [isValidating, setIsValidating] = useState(false);
100
+ const savedConfigRef = useRef(initial);
101
+ const isDirty = config !== savedConfigRef.current;
102
+ // Schema cache: maps step type → configSchema (JSON Schema) for branch detection
103
+ const schemaCacheRef = useRef(new Map());
104
+ // Fetch configSchema for all step types in the current config
105
+ useEffect(() => {
106
+ const types = new Set();
107
+ // Schema-free walk — works even when SWITCH's own schema isn't cached
108
+ // yet, so we discover steps nested inside cases[i].steps on the first pass.
109
+ walkStepConfigs(config.steps, (s) => { types.add(s.type); });
110
+ for (const type of types) {
111
+ if (!schemaCacheRef.current.has(type)) {
112
+ void (async () => {
113
+ try {
114
+ const desc = await client.schema.step(type);
115
+ schemaCacheRef.current.set(type, desc.configSchema);
116
+ }
117
+ catch {
118
+ // Step descriptor unavailable
119
+ }
120
+ })();
121
+ }
122
+ }
123
+ }, [config.steps, client]);
124
+ // Notify parent on change
125
+ useEffect(() => {
126
+ onChange?.(config);
127
+ }, [config, onChange]);
128
+ // Auto-validate (debounced)
129
+ useEffect(() => {
130
+ if (!autoValidate)
131
+ return;
132
+ const timer = setTimeout(() => {
133
+ void (async () => {
134
+ try {
135
+ const result = await client.workflows.validate(config);
136
+ setValidation(result);
137
+ }
138
+ catch {
139
+ // Validation failure is non-critical
140
+ }
141
+ })();
142
+ }, 500);
143
+ return () => clearTimeout(timer);
144
+ }, [config, autoValidate, client]);
145
+ // ─── Step mutations ───
146
+ const addStep = useCallback((type, afterStepId, inBranch) => {
147
+ const id = generateStepId(type);
148
+ const cache = schemaCacheRef.current;
149
+ const newStep = {
150
+ id,
151
+ type,
152
+ config: {},
153
+ };
154
+ const updatedSteps = inBranch
155
+ ? insertIntoBranch(config.steps, inBranch.stepId, inBranch.branchKey, newStep, cache, afterStepId)
156
+ : insertStepAfter(config.steps, afterStepId, newStep);
157
+ setConfig({ ...config, steps: updatedSteps });
158
+ // Fetch configSchema and backfill defaults (branch containers + default values)
159
+ void (async () => {
160
+ try {
161
+ const desc = await client.schema.step(type);
162
+ cache.set(type, desc.configSchema);
163
+ const defaults = generateConfigDefaults(desc.configSchema);
164
+ if (Object.keys(defaults).length > 0) {
165
+ // Use functional updater to avoid overwriting concurrent changes
166
+ setConfig((prev) => ({
167
+ ...prev,
168
+ steps: updateStepInTree(prev.steps, id, (s) => ({
169
+ ...s,
170
+ config: { ...defaults, ...s.config },
171
+ }), cache),
172
+ }));
173
+ }
174
+ }
175
+ catch {
176
+ // Descriptor fetch failed — keep empty config
177
+ }
178
+ })();
179
+ setSelectedStepId(id);
180
+ setIsTriggerSelected(false);
181
+ return id;
182
+ }, [config, setConfig, client]);
183
+ const removeStep = useCallback((stepId) => {
184
+ setConfig({
185
+ ...config,
186
+ steps: removeStepById(config.steps, stepId, schemaCacheRef.current),
187
+ });
188
+ if (selectedStepId === stepId) {
189
+ setSelectedStepId(null);
190
+ }
191
+ }, [config, setConfig, selectedStepId]);
192
+ const updateStepConfig = useCallback((stepId, stepConfig) => {
193
+ setConfig({
194
+ ...config,
195
+ steps: updateStepInTree(config.steps, stepId, (s) => ({
196
+ ...s,
197
+ config: { ...s.config, ...stepConfig },
198
+ }), schemaCacheRef.current),
199
+ });
200
+ }, [config, setConfig]);
201
+ const renameStep = useCallback((stepId, name) => {
202
+ setConfig({
203
+ ...config,
204
+ steps: updateStepInTree(config.steps, stepId, (s) => ({
205
+ ...s,
206
+ id: name,
207
+ }), schemaCacheRef.current),
208
+ });
209
+ if (selectedStepId === stepId) {
210
+ setSelectedStepId(name);
211
+ }
212
+ }, [config, setConfig, selectedStepId]);
213
+ const duplicateStep = useCallback((stepId) => {
214
+ const step = findStepInTree(config.steps, stepId, schemaCacheRef.current);
215
+ if (!step)
216
+ return;
217
+ const newId = generateStepId(step.type);
218
+ const duplicate = { ...structuredClone(step), id: newId };
219
+ setConfig({
220
+ ...config,
221
+ steps: insertStepAfter(config.steps, stepId, duplicate),
222
+ });
223
+ }, [config, setConfig]);
224
+ const toggleStepDisabled = useCallback((stepId) => {
225
+ setConfig({
226
+ ...config,
227
+ steps: updateStepInTree(config.steps, stepId, (s) => {
228
+ const cfg = (s.config ?? {});
229
+ return {
230
+ ...s,
231
+ config: { ...cfg, disabled: !cfg['disabled'] },
232
+ };
233
+ }, schemaCacheRef.current),
234
+ });
235
+ }, [config, setConfig]);
236
+ // ─── Branch mutations (for dynamic branches like PARALLEL) ───
237
+ const addBranch = useCallback((stepId, containerKey, branchName) => {
238
+ setConfig({
239
+ ...config,
240
+ steps: updateStepInTree(config.steps, stepId, (s) => {
241
+ const cfg = { ...s.config };
242
+ const container = { ...(cfg[containerKey] ?? {}) };
243
+ container[branchName] = [];
244
+ cfg[containerKey] = container;
245
+ return { ...s, config: cfg };
246
+ }, schemaCacheRef.current),
247
+ });
248
+ }, [config, setConfig]);
249
+ const removeBranch = useCallback((stepId, containerKey, branchName) => {
250
+ setConfig({
251
+ ...config,
252
+ steps: updateStepInTree(config.steps, stepId, (s) => {
253
+ const cfg = { ...s.config };
254
+ const container = { ...(cfg[containerKey] ?? {}) };
255
+ delete container[branchName];
256
+ cfg[containerKey] = container;
257
+ return { ...s, config: cfg };
258
+ }, schemaCacheRef.current),
259
+ });
260
+ }, [config, setConfig]);
261
+ const renameBranch = useCallback((stepId, containerKey, oldName, newName) => {
262
+ if (!newName.trim() || oldName === newName)
263
+ return;
264
+ setConfig({
265
+ ...config,
266
+ steps: updateStepInTree(config.steps, stepId, (s) => {
267
+ const cfg = { ...s.config };
268
+ const container = { ...(cfg[containerKey] ?? {}) };
269
+ if (!(oldName in container) || newName in container)
270
+ return s;
271
+ // Preserve insertion order: rebuild with new name in same position
272
+ const rebuilt = {};
273
+ for (const [k, v] of Object.entries(container)) {
274
+ rebuilt[k === oldName ? newName : k] = v;
275
+ }
276
+ cfg[containerKey] = rebuilt;
277
+ return { ...s, config: cfg };
278
+ }, schemaCacheRef.current),
279
+ });
280
+ }, [config, setConfig]);
281
+ // ─── Trigger ───
282
+ const setTrigger = useCallback((type, triggerConfig) => {
283
+ setConfig({
284
+ ...config,
285
+ trigger: { type, config: triggerConfig ?? {} },
286
+ });
287
+ setIsTriggerConfigured(true);
288
+ }, [config, setConfig]);
289
+ const updateTriggerConfig = useCallback((triggerConfig) => {
290
+ setConfig({
291
+ ...config,
292
+ trigger: {
293
+ ...config.trigger,
294
+ config: { ...config.trigger.config, ...triggerConfig },
295
+ },
296
+ });
297
+ }, [config, setConfig]);
298
+ // ─── Settings ───
299
+ const updateSettings = useCallback((settings) => {
300
+ setConfig({
301
+ ...config,
302
+ settings: { ...config.settings, ...settings },
303
+ });
304
+ }, [config, setConfig]);
305
+ // ─── Selection ───
306
+ const selectStep = useCallback((stepId) => {
307
+ setSelectedStepId(stepId);
308
+ setIsTriggerSelected(false);
309
+ }, []);
310
+ const selectTrigger = useCallback(() => {
311
+ setSelectedStepId(null);
312
+ setIsTriggerSelected(true);
313
+ }, []);
314
+ const clearSelection = useCallback(() => {
315
+ setSelectedStepId(null);
316
+ setIsTriggerSelected(false);
317
+ }, []);
318
+ // ─── Lifecycle ───
319
+ const validate = useCallback(async () => {
320
+ setIsValidating(true);
321
+ try {
322
+ const result = await client.workflows.validate(config);
323
+ setValidation(result);
324
+ return result;
325
+ }
326
+ finally {
327
+ setIsValidating(false);
328
+ }
329
+ }, [client, config]);
330
+ const loadConfig = useCallback((newConfig) => {
331
+ resetHistory(newConfig);
332
+ savedConfigRef.current = newConfig;
333
+ setSelectedStepId(null);
334
+ setIsTriggerSelected(false);
335
+ setValidation(null);
336
+ }, [resetHistory]);
337
+ const resetFn = useCallback(() => {
338
+ loadConfig(initialConfig ?? defaultConfig());
339
+ }, [loadConfig, initialConfig]);
340
+ const getStep = useCallback((stepId) => findStepInTree(config.steps, stepId, schemaCacheRef.current), [config.steps]);
341
+ return {
342
+ config,
343
+ selectedStepId,
344
+ isTriggerSelected,
345
+ isTriggerConfigured,
346
+ isDirty,
347
+ validation,
348
+ isValidating,
349
+ addStep,
350
+ removeStep,
351
+ updateStepConfig,
352
+ renameStep,
353
+ duplicateStep,
354
+ toggleStepDisabled,
355
+ addBranch,
356
+ removeBranch,
357
+ renameBranch,
358
+ setTrigger,
359
+ updateTriggerConfig,
360
+ updateSettings,
361
+ selectStep,
362
+ selectTrigger,
363
+ clearSelection,
364
+ undo,
365
+ redo,
366
+ canUndo,
367
+ canRedo,
368
+ validate,
369
+ loadConfig,
370
+ reset: resetFn,
371
+ getStep,
372
+ };
373
+ }
374
+ //# sourceMappingURL=use-workflow-builder.js.map