@pega/cosmos-react-build 9.0.0-build.9.8 → 9.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 (270) hide show
  1. package/lib/components/AppShell/AppShell.styles.d.ts +13 -11
  2. package/lib/components/AppShell/AppShell.styles.d.ts.map +1 -1
  3. package/lib/components/AppShell/Header/AppHeader.styles.d.ts +11 -7
  4. package/lib/components/AppShell/Header/AppHeader.styles.d.ts.map +1 -1
  5. package/lib/components/AppShell/Header/BranchButton.d.ts +6 -4
  6. package/lib/components/AppShell/Header/BranchButton.d.ts.map +1 -1
  7. package/lib/components/AppShell/Header/BranchButton.js.map +1 -1
  8. package/lib/components/AuthoringPanel/AuthoringPanel.styles.d.ts +753 -15
  9. package/lib/components/AuthoringPanel/AuthoringPanel.styles.d.ts.map +1 -1
  10. package/lib/components/AuthoringPanel/AuthoringPanel.styles.js +5 -4
  11. package/lib/components/AuthoringPanel/AuthoringPanel.styles.js.map +1 -1
  12. package/lib/components/Automation/Automation.js.map +1 -1
  13. package/lib/components/Automation/Automation.styles.d.ts +33 -10
  14. package/lib/components/Automation/Automation.styles.d.ts.map +1 -1
  15. package/lib/components/Automation/Automation.styles.js +1 -1
  16. package/lib/components/Automation/Automation.styles.js.map +1 -1
  17. package/lib/components/BackgroundPicker/BackgroundPicker.styles.d.ts +375 -11
  18. package/lib/components/BackgroundPicker/BackgroundPicker.styles.d.ts.map +1 -1
  19. package/lib/components/BackgroundPicker/BackgroundPicker.styles.js.map +1 -1
  20. package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts +8 -4
  21. package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts.map +1 -1
  22. package/lib/components/DynamicContentEditor/DynamicContentEditor.js +88 -68
  23. package/lib/components/DynamicContentEditor/DynamicContentEditor.js.map +1 -1
  24. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.d.ts +2 -0
  25. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.d.ts.map +1 -0
  26. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.js +9 -0
  27. package/lib/components/DynamicContentEditor/DynamicContentEditor.test-ids.js.map +1 -0
  28. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts +12 -3
  29. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts.map +1 -1
  30. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js +2 -1
  31. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js.map +1 -1
  32. package/lib/components/DynamicInput/DynamicInput.d.ts.map +1 -1
  33. package/lib/components/DynamicInput/DynamicInput.js +11 -5
  34. package/lib/components/DynamicInput/DynamicInput.js.map +1 -1
  35. package/lib/components/DynamicInput/DynamicInput.styles.d.ts +187 -2
  36. package/lib/components/DynamicInput/DynamicInput.styles.d.ts.map +1 -1
  37. package/lib/components/DynamicInput/DynamicInput.styles.js +29 -2
  38. package/lib/components/DynamicInput/DynamicInput.styles.js.map +1 -1
  39. package/lib/components/DynamicInput/DynamicInput.types.d.ts +4 -2
  40. package/lib/components/DynamicInput/DynamicInput.types.d.ts.map +1 -1
  41. package/lib/components/DynamicInput/DynamicInput.types.js.map +1 -1
  42. package/lib/components/DynamicInput/SourceButton.d.ts +1 -1
  43. package/lib/components/DynamicInput/SourceButton.d.ts.map +1 -1
  44. package/lib/components/DynamicInput/SourceButton.js.map +1 -1
  45. package/lib/components/DynamicInput/utils.d.ts.map +1 -1
  46. package/lib/components/DynamicInput/utils.js +5 -1
  47. package/lib/components/DynamicInput/utils.js.map +1 -1
  48. package/lib/components/EmptyRuleTemplate/EmptyRuleTemplate.d.ts +5 -5
  49. package/lib/components/EmptyRuleTemplate/EmptyRuleTemplate.d.ts.map +1 -1
  50. package/lib/components/EmptyRuleTemplate/EmptyRuleTemplate.js.map +1 -1
  51. package/lib/components/Expression/Expression.styles.d.ts +376 -8
  52. package/lib/components/Expression/Expression.styles.d.ts.map +1 -1
  53. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.d.ts.map +1 -1
  54. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.js +138 -41
  55. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.js.map +1 -1
  56. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.d.ts +190 -8
  57. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.d.ts.map +1 -1
  58. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.js +53 -32
  59. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.js.map +1 -1
  60. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.d.ts +2 -1
  61. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.d.ts.map +1 -1
  62. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.js.map +1 -1
  63. package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.d.ts +1 -1
  64. package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.d.ts.map +1 -1
  65. package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.js +7 -7
  66. package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.js.map +1 -1
  67. package/lib/components/ExpressionBuilder/ExpressionBuilder.d.ts.map +1 -1
  68. package/lib/components/ExpressionBuilder/ExpressionBuilder.js +7 -6
  69. package/lib/components/ExpressionBuilder/ExpressionBuilder.js.map +1 -1
  70. package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.d.ts +211 -22
  71. package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.d.ts.map +1 -1
  72. package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.js +6 -0
  73. package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.js.map +1 -1
  74. package/lib/components/ExpressionBuilder/ExpressionBuilder.types.d.ts +5 -3
  75. package/lib/components/ExpressionBuilder/ExpressionBuilder.types.d.ts.map +1 -1
  76. package/lib/components/ExpressionBuilder/ExpressionBuilder.types.js.map +1 -1
  77. package/lib/components/ExpressionBuilder/ExpressionItem.d.ts.map +1 -1
  78. package/lib/components/ExpressionBuilder/ExpressionItem.js +17 -13
  79. package/lib/components/ExpressionBuilder/ExpressionItem.js.map +1 -1
  80. package/lib/components/ExpressionBuilder/ExpressionList.d.ts.map +1 -1
  81. package/lib/components/ExpressionBuilder/ExpressionList.js +18 -13
  82. package/lib/components/ExpressionBuilder/ExpressionList.js.map +1 -1
  83. package/lib/components/ExpressionBuilder/index.d.ts +1 -1
  84. package/lib/components/ExpressionBuilder/index.d.ts.map +1 -1
  85. package/lib/components/ExpressionBuilder/index.js.map +1 -1
  86. package/lib/components/FieldReference/FieldReference.styles.d.ts +20 -11
  87. package/lib/components/FieldReference/FieldReference.styles.d.ts.map +1 -1
  88. package/lib/components/FieldReference/FieldReference.styles.js +10 -1
  89. package/lib/components/FieldReference/FieldReference.styles.js.map +1 -1
  90. package/lib/components/FieldReference/FieldReferenceDisplay.d.ts.map +1 -1
  91. package/lib/components/FieldReference/FieldReferenceDisplay.js +3 -3
  92. package/lib/components/FieldReference/FieldReferenceDisplay.js.map +1 -1
  93. package/lib/components/FieldReference/FieldReferenceInput.d.ts.map +1 -1
  94. package/lib/components/FieldReference/FieldReferenceInput.js +13 -5
  95. package/lib/components/FieldReference/FieldReferenceInput.js.map +1 -1
  96. package/lib/components/FlowModeller/AddNode.d.ts +22 -0
  97. package/lib/components/FlowModeller/AddNode.d.ts.map +1 -0
  98. package/lib/components/FlowModeller/AddNode.js +95 -0
  99. package/lib/components/FlowModeller/AddNode.js.map +1 -0
  100. package/lib/components/FlowModeller/Connector.d.ts +12 -0
  101. package/lib/components/FlowModeller/Connector.d.ts.map +1 -0
  102. package/lib/components/FlowModeller/Connector.js +84 -0
  103. package/lib/components/FlowModeller/Connector.js.map +1 -0
  104. package/lib/components/FlowModeller/DeleteDialog.d.ts +39 -0
  105. package/lib/components/FlowModeller/DeleteDialog.d.ts.map +1 -0
  106. package/lib/components/FlowModeller/DeleteDialog.js +158 -0
  107. package/lib/components/FlowModeller/DeleteDialog.js.map +1 -0
  108. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.d.ts +4 -0
  109. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.d.ts.map +1 -0
  110. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.js +37 -0
  111. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.js.map +1 -0
  112. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.styles.d.ts +8 -0
  113. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.styles.d.ts.map +1 -0
  114. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.styles.js +80 -0
  115. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.styles.js.map +1 -0
  116. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.types.d.ts +36 -0
  117. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.types.d.ts.map +1 -0
  118. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.types.js +2 -0
  119. package/lib/components/FlowModeller/FlowAuthoringPanel/FlowAuthoringPanel.types.js.map +1 -0
  120. package/lib/components/FlowModeller/FlowModeller.d.ts +5 -0
  121. package/lib/components/FlowModeller/FlowModeller.d.ts.map +1 -0
  122. package/lib/components/FlowModeller/FlowModeller.js +359 -0
  123. package/lib/components/FlowModeller/FlowModeller.js.map +1 -0
  124. package/lib/components/FlowModeller/FlowModeller.test-ids.d.ts +3 -0
  125. package/lib/components/FlowModeller/FlowModeller.test-ids.d.ts.map +1 -0
  126. package/lib/components/FlowModeller/FlowModeller.test-ids.js +5 -0
  127. package/lib/components/FlowModeller/FlowModeller.test-ids.js.map +1 -0
  128. package/lib/components/FlowModeller/FlowModeller.types.d.ts +84 -0
  129. package/lib/components/FlowModeller/FlowModeller.types.d.ts.map +1 -0
  130. package/lib/components/FlowModeller/FlowModeller.types.js +2 -0
  131. package/lib/components/FlowModeller/FlowModeller.types.js.map +1 -0
  132. package/lib/components/FlowModeller/FlowModellerContext.d.ts +10 -0
  133. package/lib/components/FlowModeller/FlowModellerContext.d.ts.map +1 -0
  134. package/lib/components/FlowModeller/FlowModellerContext.js +8 -0
  135. package/lib/components/FlowModeller/FlowModellerContext.js.map +1 -0
  136. package/lib/components/FlowModeller/Node/Node.types.d.ts +93 -0
  137. package/lib/components/FlowModeller/Node/Node.types.d.ts.map +1 -0
  138. package/lib/components/FlowModeller/Node/Node.types.js +27 -0
  139. package/lib/components/FlowModeller/Node/Node.types.js.map +1 -0
  140. package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts +212 -0
  141. package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts.map +1 -0
  142. package/lib/components/FlowModeller/Node/NodeTemplate.styles.js +144 -0
  143. package/lib/components/FlowModeller/Node/NodeTemplate.styles.js.map +1 -0
  144. package/lib/components/FlowModeller/Node/NodeTemplates.d.ts +5 -0
  145. package/lib/components/FlowModeller/Node/NodeTemplates.d.ts.map +1 -0
  146. package/lib/components/FlowModeller/Node/NodeTemplates.js +130 -0
  147. package/lib/components/FlowModeller/Node/NodeTemplates.js.map +1 -0
  148. package/lib/components/FlowModeller/Node.d.ts +10 -0
  149. package/lib/components/FlowModeller/Node.d.ts.map +1 -0
  150. package/lib/components/FlowModeller/Node.js +43 -0
  151. package/lib/components/FlowModeller/Node.js.map +1 -0
  152. package/lib/components/FlowModeller/Renderer/Renderer.d.ts +4 -0
  153. package/lib/components/FlowModeller/Renderer/Renderer.d.ts.map +1 -0
  154. package/lib/components/FlowModeller/Renderer/Renderer.js +198 -0
  155. package/lib/components/FlowModeller/Renderer/Renderer.js.map +1 -0
  156. package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts +20 -0
  157. package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts.map +1 -0
  158. package/lib/components/FlowModeller/Renderer/Renderer.types.js +2 -0
  159. package/lib/components/FlowModeller/Renderer/Renderer.types.js.map +1 -0
  160. package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts +63 -0
  161. package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts.map +1 -0
  162. package/lib/components/FlowModeller/Renderer/Utils/Graph.js +291 -0
  163. package/lib/components/FlowModeller/Renderer/Utils/Graph.js.map +1 -0
  164. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.d.ts +37 -0
  165. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.d.ts.map +1 -0
  166. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.js +114 -0
  167. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.js.map +1 -0
  168. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.d.ts +29 -0
  169. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.d.ts.map +1 -0
  170. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.js +191 -0
  171. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.js.map +1 -0
  172. package/lib/components/FlowModeller/Renderer/Utils/RendererUtils.d.ts +38 -0
  173. package/lib/components/FlowModeller/Renderer/Utils/RendererUtils.d.ts.map +1 -0
  174. package/lib/components/FlowModeller/Renderer/Utils/RendererUtils.js +363 -0
  175. package/lib/components/FlowModeller/Renderer/Utils/RendererUtils.js.map +1 -0
  176. package/lib/components/FlowModeller/Utils/addNodeUtils.d.ts +18 -0
  177. package/lib/components/FlowModeller/Utils/addNodeUtils.d.ts.map +1 -0
  178. package/lib/components/FlowModeller/Utils/addNodeUtils.js +148 -0
  179. package/lib/components/FlowModeller/Utils/addNodeUtils.js.map +1 -0
  180. package/lib/components/FlowModeller/Utils/deleteNodeUtils.d.ts +33 -0
  181. package/lib/components/FlowModeller/Utils/deleteNodeUtils.d.ts.map +1 -0
  182. package/lib/components/FlowModeller/Utils/deleteNodeUtils.js +89 -0
  183. package/lib/components/FlowModeller/Utils/deleteNodeUtils.js.map +1 -0
  184. package/lib/components/FlowModeller/constants.d.ts +10 -0
  185. package/lib/components/FlowModeller/constants.d.ts.map +1 -0
  186. package/lib/components/FlowModeller/constants.js +9 -0
  187. package/lib/components/FlowModeller/constants.js.map +1 -0
  188. package/lib/components/FlowModeller/helper.d.ts +39 -0
  189. package/lib/components/FlowModeller/helper.d.ts.map +1 -0
  190. package/lib/components/FlowModeller/helper.js +230 -0
  191. package/lib/components/FlowModeller/helper.js.map +1 -0
  192. package/lib/components/FlowModeller/index.d.ts +18 -0
  193. package/lib/components/FlowModeller/index.d.ts.map +1 -0
  194. package/lib/components/FlowModeller/index.js +11 -0
  195. package/lib/components/FlowModeller/index.js.map +1 -0
  196. package/lib/components/IconTile/IconTile.d.ts +2 -2
  197. package/lib/components/IconTile/IconTile.d.ts.map +1 -1
  198. package/lib/components/ItemLibrary/ItemLibrary.d.ts +2 -2
  199. package/lib/components/ItemLibrary/ItemLibrary.d.ts.map +1 -1
  200. package/lib/components/ItemLibrary/ItemLibrary.js +5 -1
  201. package/lib/components/ItemLibrary/ItemLibrary.js.map +1 -1
  202. package/lib/components/LifeCycle/Category.d.ts +6 -6
  203. package/lib/components/LifeCycle/Category.d.ts.map +1 -1
  204. package/lib/components/LifeCycle/LifeCycle.d.ts +184 -2
  205. package/lib/components/LifeCycle/LifeCycle.d.ts.map +1 -1
  206. package/lib/components/LifeCycle/LifeCycle.types.d.ts +70 -0
  207. package/lib/components/LifeCycle/LifeCycle.types.d.ts.map +1 -1
  208. package/lib/components/LifeCycle/Stage.d.ts +6 -6
  209. package/lib/components/LifeCycle/Stage.d.ts.map +1 -1
  210. package/lib/components/LifeCycle/Step.d.ts +8 -8
  211. package/lib/components/LifeCycle/Step.d.ts.map +1 -1
  212. package/lib/components/LifeCycle/Step.js +1 -1
  213. package/lib/components/LifeCycle/Step.js.map +1 -1
  214. package/lib/components/LifeCycle/Task.d.ts +14 -10
  215. package/lib/components/LifeCycle/Task.d.ts.map +1 -1
  216. package/lib/components/LifeCycle/TaskGroup.d.ts +3 -1
  217. package/lib/components/LifeCycle/TaskGroup.d.ts.map +1 -1
  218. package/lib/components/MobileBuildSummary/MobileBuildSummary.d.ts +2 -2
  219. package/lib/components/MobileBuildSummary/MobileBuildSummary.d.ts.map +1 -1
  220. package/lib/components/ObjectSelect/InputTree/InputTree.styles.d.ts +10 -8
  221. package/lib/components/ObjectSelect/InputTree/InputTree.styles.d.ts.map +1 -1
  222. package/lib/components/ObjectSelect/InputTree/InputTree.styles.js +1 -1
  223. package/lib/components/ObjectSelect/InputTree/InputTree.styles.js.map +1 -1
  224. package/lib/components/PageBanner/PageBanner.d.ts +3 -3
  225. package/lib/components/PageBanner/PageBanner.d.ts.map +1 -1
  226. package/lib/components/PageBanner/PageBanner.js +6 -2
  227. package/lib/components/PageBanner/PageBanner.js.map +1 -1
  228. package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageHeader.d.ts +4 -2
  229. package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageHeader.d.ts.map +1 -1
  230. package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageHeader.js +23 -12
  231. package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageHeader.js.map +1 -1
  232. package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageTemplate.d.ts.map +1 -1
  233. package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageTemplate.js +14 -5
  234. package/lib/components/PageTemplates/ConstructPageTemplate/ConstructPageTemplate.js.map +1 -1
  235. package/lib/components/PageTemplates/GalleryPage.d.ts +2 -2
  236. package/lib/components/PageTemplates/GalleryPage.d.ts.map +1 -1
  237. package/lib/components/PageTemplates/HeaderActionButtons.d.ts.map +1 -1
  238. package/lib/components/PageTemplates/HeaderActionButtons.js +11 -3
  239. package/lib/components/PageTemplates/HeaderActionButtons.js.map +1 -1
  240. package/lib/components/PageTemplates/PageTemplate.styles.d.ts +375 -8
  241. package/lib/components/PageTemplates/PageTemplate.styles.d.ts.map +1 -1
  242. package/lib/components/PageTemplates/PageTemplate.styles.js +18 -10
  243. package/lib/components/PageTemplates/PageTemplate.styles.js.map +1 -1
  244. package/lib/components/PageTemplates/PageTemplate.types.d.ts +18 -13
  245. package/lib/components/PageTemplates/PageTemplate.types.d.ts.map +1 -1
  246. package/lib/components/PageTemplates/PageTemplate.types.js.map +1 -1
  247. package/lib/components/PageTemplates/PageTemplates.d.ts +4 -1
  248. package/lib/components/PageTemplates/PageTemplates.d.ts.map +1 -1
  249. package/lib/components/PageTemplates/PageTemplates.js +9 -5
  250. package/lib/components/PageTemplates/PageTemplates.js.map +1 -1
  251. package/lib/components/PageTemplates/ShowcasePage.d.ts +2 -2
  252. package/lib/components/PageTemplates/ShowcasePage.d.ts.map +1 -1
  253. package/lib/components/RulePicker/RulePicker.d.ts +1 -1
  254. package/lib/components/SummaryCard/SummaryCard.d.ts.map +1 -1
  255. package/lib/components/SummaryCard/SummaryCard.js +13 -1
  256. package/lib/components/SummaryCard/SummaryCard.js.map +1 -1
  257. package/lib/components/Workbench/Workbench.styles.d.ts +12 -8
  258. package/lib/components/Workbench/Workbench.styles.d.ts.map +1 -1
  259. package/lib/index.d.ts +2 -0
  260. package/lib/index.d.ts.map +1 -1
  261. package/lib/index.js +2 -0
  262. package/lib/index.js.map +1 -1
  263. package/lib/utils/typeIconMapping.d.ts.map +1 -1
  264. package/lib/utils/typeIconMapping.js +2 -0
  265. package/lib/utils/typeIconMapping.js.map +1 -1
  266. package/lib/utils/utils.d.ts +5 -0
  267. package/lib/utils/utils.d.ts.map +1 -0
  268. package/lib/utils/utils.js +19 -0
  269. package/lib/utils/utils.js.map +1 -0
  270. package/package.json +7 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Renderer.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Renderer/Renderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type { KeyboardEvent } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Flex, defaultThemeProp } from '@pega/cosmos-react-core';\n\nimport FlowModellerContext from '../FlowModellerContext';\n\nimport type { RendererProps } from './Renderer.types';\nimport GraphLayout from './Utils/GraphLayout';\nimport type { PlottedGraphConnector, PlottedGraphNode } from './Utils/GraphLayout';\nimport { DirectedGraph } from './Utils/Graph';\nimport GraphTraversal from './Utils/GraphTraversal';\nimport {\n getParentConvergence,\n groupByPosition,\n arrowUpKey,\n arrowDownKey,\n horizontalNavigation\n} from './Utils/RendererUtils';\n\nconst StyledWrapper = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n`;\n\nconst StyledContentWrapper = styled.div(({ theme }) => {\n return css`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n background-color: ${theme.base.palette['app-background']};\n > svg {\n background-color: ${theme.base.palette['app-background']};\n }\n `;\n});\n\nStyledContentWrapper.defaultProps = defaultThemeProp;\n\nconst StyledNodeWrapper = styled(StyledContentWrapper)(() => {\n return css`\n width: var(--width);\n height: var(--height);\n transform: translate(var(--xPos), var(--yPos));\n `;\n});\n\nconst StyledRootNodeWrapper = styled.foreignObject`\n overflow: visible;\n`;\n\nconst Renderer = ({\n graphData,\n connector: Connector,\n node: Node,\n selectedNodeId\n}: RendererProps) => {\n // apply the plotted positions\n const { readOnly } = useContext(FlowModellerContext);\n const graph: DirectedGraph<PlottedGraphNode, PlottedGraphConnector> = new DirectedGraph(\n graphData\n );\n\n const rootNode = useMemo(() => {\n const rootNodeId = GraphTraversal.findRootNode(graph);\n return rootNodeId ? graph.getNode(rootNodeId) : undefined;\n }, [graph]);\n\n const graphDimensions = GraphLayout.plot<RendererProps['graphData']>(graphData, readOnly);\n const positions = useMemo(() => groupByPosition(graph), [graph]);\n\n const [activeGraphItemId, setActiveGraphItemId] = useState<string>();\n const rendererRef = useRef<HTMLDivElement>(null);\n const prevItem = useRef<string>();\n const prevSelectedNodeId = useRef<string>();\n\n const activeGraphItem: PlottedGraphNode | PlottedGraphConnector | undefined = useMemo(\n () =>\n [...graph.getNodes(), ...graph.getConnectors()].find(data => {\n return data.id === activeGraphItemId;\n }),\n [activeGraphItemId, graph]\n );\n\n useEffect(() => {\n // Set PREVIOUS Connector - If current focused item is a node, we are saving the previous connector id.\n let inConnectors = activeGraphItem ? graph.getInConnectors(activeGraphItem.id) : [];\n if (\n activeGraphItem &&\n 'dimensions' in activeGraphItem &&\n activeGraphItem.dimensions?.height &&\n inConnectors.length\n ) {\n const prevNode = graph.getNode(inConnectors[0].fromNodeId);\n inConnectors = !prevNode.dimensions.height\n ? graph.getInConnectors(prevNode.id)\n : inConnectors;\n const parentConvergence = getParentConvergence(prevNode, graph);\n if (inConnectors.length) {\n prevItem.current =\n !prevNode.dimensions.height && inConnectors.length > 1 && parentConvergence\n ? parentConvergence.parent.id\n : inConnectors[0].id;\n }\n }\n\n /** DELETE NODE - If no item is found and prevItem has a value then we assume that a node has been deleted\n * set activeGraphItemId to prevItem and reset it\n */\n if (!activeGraphItem && prevItem.current && !selectedNodeId) {\n const convergence = GraphTraversal.getConvergenceData(graphData, prevItem.current);\n\n setActiveGraphItemId(\n convergence ? graph.getOutConnectors(convergence.nodeId)[0].id : prevItem.current\n );\n\n prevItem.current = undefined;\n }\n }, [activeGraphItemId, graph]);\n\n const elementScrollIntoView = (focusElementId: string) => {\n const isConnector = graphData?.connectors?.find(item => item.id === focusElementId);\n const elementRef = isConnector\n ? rendererRef.current?.querySelector(`[id='${focusElementId}']`)?.nextElementSibling\n : rendererRef.current?.querySelector(`[id='modeller-node-${focusElementId}']`);\n\n if (elementRef) {\n setTimeout(() => {\n elementRef.scrollIntoView({\n block: 'center',\n behavior: 'smooth'\n });\n });\n }\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLButtonElement | HTMLDivElement | SVGGElement>) => {\n if (\n activeGraphItemId &&\n activeGraphItem &&\n ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key) &&\n !selectedNodeId\n ) {\n let focusElementId: string | undefined | false;\n switch (e.key) {\n case 'ArrowUp':\n focusElementId = arrowUpKey({\n activeGraphItemId,\n graph,\n activeGraphItem,\n readOnly: readOnly ?? false\n });\n break;\n case 'ArrowDown':\n focusElementId = arrowDownKey({\n activeGraphItemId,\n graph,\n activeGraphItem,\n readOnly: readOnly ?? false\n });\n break;\n case 'ArrowLeft':\n focusElementId = horizontalNavigation({\n keyEvent: 'ArrowLeft',\n positions,\n activeGraphItem,\n graph,\n readOnly\n });\n break;\n case 'ArrowRight':\n focusElementId = horizontalNavigation({\n keyEvent: 'ArrowRight',\n positions,\n activeGraphItem,\n graph,\n readOnly\n });\n break;\n default:\n break;\n }\n\n if (focusElementId) {\n setActiveGraphItemId(focusElementId);\n elementScrollIntoView(focusElementId);\n }\n }\n };\n\n /** Saving the last selectedNodeId in a variable\n * so on close of workbench the focus can return to the node\n * might be removed in future when workbench handles re-focusing the target element on close\n */\n useEffect(() => {\n if (selectedNodeId) {\n prevSelectedNodeId.current = selectedNodeId;\n } else if (!selectedNodeId && prevSelectedNodeId.current) {\n setActiveGraphItemId(prevSelectedNodeId.current);\n prevSelectedNodeId.current = undefined;\n }\n }, [selectedNodeId]);\n\n const getNodeLabel = (target: string | undefined): string | undefined => {\n if (target) {\n const targetNode = graphData.nodes.find(nodeItem => nodeItem.id === target);\n return targetNode && 'label' in targetNode ? String(targetNode.label) : undefined;\n }\n return target;\n };\n\n return (\n <StyledWrapper ref={rendererRef}>\n <StyledContentWrapper>\n <svg\n width={graphDimensions.width}\n height={graphDimensions.height}\n viewBox={`0 0 ${graphDimensions.width} ${graphDimensions.height}`}\n >\n {rootNode && (\n <StyledRootNodeWrapper\n width={rootNode.dimensions.width}\n height={rootNode.dimensions.height}\n x={rootNode.position.x}\n y={rootNode.position.y}\n >\n <Node\n {...rootNode}\n active={rootNode.id === activeGraphItemId}\n onFocus={() => {\n setActiveGraphItemId(rootNode.id);\n }}\n onKeyDown={onKeyDown}\n />\n </StyledRootNodeWrapper>\n )}\n {graphData.connectors.map(item => {\n const fromNodeLabel = getNodeLabel(item.fromNodeId);\n const toNodeLabel = getNodeLabel(item.toNodeId);\n return (\n <Connector\n {...item}\n fromNodeLabel={fromNodeLabel}\n toNodeLabel={toNodeLabel}\n key={item.id}\n active={item.id === activeGraphItemId}\n onFocus={() => {\n setActiveGraphItemId(item.id);\n }}\n onKeyDown={onKeyDown}\n />\n );\n })}\n </svg>\n </StyledContentWrapper>\n <StyledContentWrapper>\n {graphData.nodes\n .filter(node => node.id !== rootNode?.id)\n .map(item => {\n let referencedNode;\n if (item.type?.minConnectors === 0 && item.reference) {\n referencedNode = graph.getNode(item.reference);\n }\n const prevNodeId = graphData.connectors.find(\n connector => connector.toNodeId === item.id\n )?.fromNodeId;\n const fromNodeLabel = getNodeLabel(prevNodeId);\n\n const nextNodeId = graphData.connectors.find(\n connector => connector.fromNodeId === item.id\n )?.toNodeId;\n const toNodeLabel = getNodeLabel(nextNodeId);\n\n return (\n <Flex\n key={item.id}\n as={StyledNodeWrapper}\n id={item.id}\n style={{\n '--width': `${item.dimensions.width}px`,\n '--height': `${item.dimensions.height}px`,\n '--xPos': `${item.position.x}px`,\n '--yPos': `${item.position.y}px`\n }}\n container={{ justify: 'center' }}\n >\n <Node\n {...item}\n fromNodeLabel={fromNodeLabel}\n toNodeLabel={toNodeLabel}\n referencedNode={referencedNode}\n active={item.id === activeGraphItemId}\n onFocus={() => {\n setActiveGraphItemId(item.id);\n }}\n onKeyDown={onKeyDown}\n />\n </Flex>\n );\n })}\n </StyledContentWrapper>\n </StyledWrapper>\n );\n};\n\nexport default Renderer;\n"]}
@@ -0,0 +1,20 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { NodeEvents, NodeLabels } from '../Node/Node.types';
3
+ import type { ConnectorProps, Node, GraphData } from './Utils/Graph';
4
+ import type { PlottedGraphConnector, PlottedGraphNode } from './Utils/GraphLayout';
5
+ export interface AddNodeHandlerParams {
6
+ refType: 'node' | 'connector';
7
+ refId: string | string[];
8
+ }
9
+ export interface RendererProps {
10
+ graphData: GraphData<PlottedGraphNode, PlottedGraphConnector>;
11
+ disableAutoLayout?: boolean;
12
+ highlights?: {
13
+ nodes: Record<string, Node>;
14
+ connectors: Record<string, ConnectorProps>;
15
+ };
16
+ connector: ComponentType<PlottedGraphConnector & NodeEvents & NodeLabels>;
17
+ node: ComponentType<PlottedGraphNode & NodeEvents & NodeLabels>;
18
+ selectedNodeId?: string;
19
+ }
20
+ //# sourceMappingURL=Renderer.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Renderer.types.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Renderer/Renderer.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,SAAS,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;IAC9D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;KAC5C,CAAC;IACF,SAAS,EAAE,aAAa,CAAC,qBAAqB,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;IAC1E,IAAI,EAAE,aAAa,CAAC,gBAAgB,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Renderer.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Renderer.types.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Renderer/Renderer.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ComponentType } from 'react';\n\nimport type { NodeEvents, NodeLabels } from '../Node/Node.types';\n\nimport type { ConnectorProps, Node, GraphData } from './Utils/Graph';\nimport type { PlottedGraphConnector, PlottedGraphNode } from './Utils/GraphLayout';\n\nexport interface AddNodeHandlerParams {\n refType: 'node' | 'connector';\n refId: string | string[];\n}\n\nexport interface RendererProps {\n graphData: GraphData<PlottedGraphNode, PlottedGraphConnector>;\n disableAutoLayout?: boolean;\n highlights?: {\n nodes: Record<string, Node>;\n connectors: Record<string, ConnectorProps>;\n };\n connector: ComponentType<PlottedGraphConnector & NodeEvents & NodeLabels>;\n node: ComponentType<PlottedGraphNode & NodeEvents & NodeLabels>;\n selectedNodeId?: string;\n}\n"]}
@@ -0,0 +1,63 @@
1
+ import type { PlottedGraphConnector, PlottedGraphNode } from './GraphLayout';
2
+ export interface ConnectorProps<T = unknown> {
3
+ id: string;
4
+ fromNodeId: string;
5
+ toNodeId: string;
6
+ label?: string;
7
+ data?: T;
8
+ }
9
+ export interface NodeType {
10
+ minConnectors: number;
11
+ }
12
+ export interface Node<T = unknown> {
13
+ type?: NodeType;
14
+ id: string;
15
+ label?: string;
16
+ data?: T;
17
+ reference?: string;
18
+ }
19
+ export interface GraphData<T extends Node = Node, U extends ConnectorProps = ConnectorProps> {
20
+ nodes: T[];
21
+ connectors: U[];
22
+ }
23
+ export declare const sortConnectors: (connectors: PlottedGraphConnector[]) => void;
24
+ export declare const isPlottedGraphConnector: (connectors: (ConnectorProps | PlottedGraphConnector)[]) => connectors is PlottedGraphConnector[];
25
+ export declare class DirectedGraph<T extends Node | PlottedGraphNode = Node, U extends ConnectorProps | PlottedGraphConnector = ConnectorProps, D1 = unknown, D2 = unknown> {
26
+ private nodes;
27
+ private connectors;
28
+ private nodeData;
29
+ private connectorData;
30
+ private inConnectors;
31
+ private prevNodesCount;
32
+ private outConnectors;
33
+ private nextNodesCount;
34
+ private nodeCount;
35
+ private connectorsCount;
36
+ constructor(graphData?: GraphData<T, U>);
37
+ getGraphData(): GraphData<T, U>;
38
+ getNodeCount(): number;
39
+ getNodes(): T[];
40
+ addNode(node: T, data?: D1): DirectedGraph;
41
+ getNode(nodeId: string): T;
42
+ hasNode(nodeId: string): boolean;
43
+ deleteNode(nodeId: string, ignoreConnectors?: boolean): DirectedGraph<T, U>;
44
+ getPrevNodes(nodeId: string): T[];
45
+ getNextNodes(nodeId: string): T[];
46
+ getPrevNodesCount(nodeId: string): number;
47
+ getNextNodesCount(nodeId: string): number;
48
+ isLeaf(nodeId: string): boolean;
49
+ getConnectorsCount(): number;
50
+ getConnectors(): U[];
51
+ addConnector(connector: U, data?: D2): DirectedGraph<T, U>;
52
+ hasConnector(id: string): boolean;
53
+ getConnector(id: string): U;
54
+ removeConnector(id: string): DirectedGraph<T, U>;
55
+ setConnector(id: string, data: {
56
+ fromNodeId?: string;
57
+ toNodeId?: string;
58
+ }): DirectedGraph<T, U>;
59
+ getInConnectors(toNodeId: string, fromNodeId?: string): U[];
60
+ getOutConnectors(fromNodeId: string, toNodeId?: string): U[];
61
+ getAllNodeConnectors(nodeId: string): U[];
62
+ }
63
+ //# sourceMappingURL=Graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../../../src/components/FlowModeller/Renderer/Utils/Graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,291 @@
1
+ // sort given connectors based on first point x-cord in ascending order
2
+ export const sortConnectors = (connectors) => {
3
+ if (connectors.length > 1) {
4
+ connectors.sort((a, b) => a.points.length && b.points.length ? a.points[0].x - b.points[0].x : 0);
5
+ }
6
+ };
7
+ // Type guard to check if connector is of type PlottedGraphConnector
8
+ export const isPlottedGraphConnector = (connectors) => connectors.length > 0 && 'points' in connectors[0];
9
+ export class DirectedGraph {
10
+ nodes = {};
11
+ connectors = {};
12
+ // additional way to maintain related data - for cases where Graph is used for indirect purposes
13
+ nodeData = {};
14
+ connectorData = {};
15
+ inConnectors = new Map(); // we are maintaining connector reference instead of id, to avoid iterations later on.
16
+ prevNodesCount = {};
17
+ outConnectors = new Map(); // we are maintaining connector reference instead of id, to avoid iterations later on
18
+ nextNodesCount = {};
19
+ nodeCount = 0;
20
+ connectorsCount = 0;
21
+ constructor(graphData = { nodes: [], connectors: [] }) {
22
+ // Not necessary to clone, as this class never modifies any nodes
23
+ graphData.nodes.forEach(item => this.addNode(item));
24
+ // copy/clone, connectors properties 'fromNodeId' and 'toNodeId' values may get modified by this class
25
+ graphData.connectors.forEach(item => {
26
+ const { data } = item;
27
+ const newItem = JSON.parse(JSON.stringify(item));
28
+ // below statement is necessary to retain the actual references of any function/instances if any
29
+ newItem.data = data;
30
+ this.addConnector(newItem);
31
+ });
32
+ }
33
+ getGraphData() {
34
+ return {
35
+ nodes: this.getNodes(),
36
+ connectors: this.getConnectors()
37
+ };
38
+ }
39
+ getNodeCount() {
40
+ return this.nodeCount;
41
+ }
42
+ getNodes() {
43
+ return Object.values(this.nodes);
44
+ }
45
+ addNode(node, data) {
46
+ if (this.nodes[node.id] !== undefined) {
47
+ this.nodes[node.id] = node;
48
+ this.nodeData[node.id] = data;
49
+ }
50
+ else {
51
+ this.nodes[node.id] = node;
52
+ this.nodeData[node.id] = data;
53
+ this.inConnectors.set(node.id, new Map());
54
+ this.prevNodesCount[node.id] = {};
55
+ this.outConnectors.set(node.id, new Map());
56
+ this.nextNodesCount[node.id] = {};
57
+ this.nodeCount += 1;
58
+ }
59
+ return this;
60
+ }
61
+ getNode(nodeId) {
62
+ return this.nodes[nodeId];
63
+ }
64
+ hasNode(nodeId) {
65
+ return this.nodes[nodeId] !== undefined;
66
+ }
67
+ deleteNode(nodeId, ignoreConnectors = false) {
68
+ if (this.hasNode(nodeId)) {
69
+ delete this.nodes[nodeId];
70
+ delete this.nodeData[nodeId];
71
+ if (ignoreConnectors !== true) {
72
+ const removeConnector = (id) => this.removeConnector(id);
73
+ // IMP NOTE its the responsibility of the callee to make sure that the connectors are cleanly reassigned, or else all attached connectors will be deleted
74
+ const inConnectors = this.inConnectors.get(nodeId);
75
+ if (inConnectors) {
76
+ Array.from(inConnectors.keys()).forEach(removeConnector);
77
+ }
78
+ this.inConnectors.delete(nodeId);
79
+ delete this.prevNodesCount[nodeId];
80
+ const outConnectors = this.outConnectors.get(nodeId);
81
+ if (outConnectors) {
82
+ Array.from(outConnectors.keys()).forEach(removeConnector);
83
+ }
84
+ this.outConnectors.delete(nodeId);
85
+ delete this.nextNodesCount[nodeId];
86
+ }
87
+ this.nodeCount -= 1;
88
+ }
89
+ return this;
90
+ }
91
+ getPrevNodes(nodeId) {
92
+ return this.prevNodesCount[nodeId]
93
+ ? Object.keys(this.prevNodesCount[nodeId]).map(id => this.getNode(id))
94
+ : [];
95
+ }
96
+ getNextNodes(nodeId) {
97
+ return this.nextNodesCount[nodeId]
98
+ ? Object.keys(this.nextNodesCount[nodeId]).map(id => this.getNode(id))
99
+ : [];
100
+ }
101
+ getPrevNodesCount(nodeId) {
102
+ return (this.prevNodesCount[nodeId] ? Object.values(this.prevNodesCount[nodeId]) : []).reduce((prev, current) => prev + current, 0);
103
+ }
104
+ getNextNodesCount(nodeId) {
105
+ return (this.nextNodesCount[nodeId] ? Object.values(this.nextNodesCount[nodeId]) : []).reduce((prev, current) => prev + current, 0);
106
+ }
107
+ isLeaf(nodeId) {
108
+ return this.getNextNodes(nodeId).length === 0;
109
+ }
110
+ // -- Connectors
111
+ getConnectorsCount() {
112
+ return this.connectorsCount;
113
+ }
114
+ getConnectors() {
115
+ return Object.values(this.connectors);
116
+ }
117
+ addConnector(connector, data) {
118
+ if (this.connectors[connector.id] !== undefined) {
119
+ // update the map
120
+ this.connectors[connector.id] = connector;
121
+ this.connectorData[connector.id] = data;
122
+ return this;
123
+ }
124
+ const { id } = connector;
125
+ const { fromNodeId } = connector;
126
+ const { toNodeId } = connector;
127
+ // check if nodes with given ids exist
128
+ if (this.nodes[fromNodeId] === undefined || this.nodes[toNodeId] === undefined) {
129
+ throw new Error(`One or more nodes does not exist, cannot add connector ${fromNodeId}-${toNodeId}`);
130
+ }
131
+ // add it to the map
132
+ this.connectors[id] = connector;
133
+ this.connectorData[id] = data;
134
+ // update prev nodes count
135
+ if (this.prevNodesCount[toNodeId][fromNodeId]) {
136
+ this.prevNodesCount[toNodeId][fromNodeId] += 1;
137
+ }
138
+ else {
139
+ this.prevNodesCount[toNodeId][fromNodeId] = 1;
140
+ }
141
+ // update next nodes count
142
+ if (this.nextNodesCount[fromNodeId][toNodeId]) {
143
+ this.nextNodesCount[fromNodeId][toNodeId] += 1;
144
+ }
145
+ else {
146
+ this.nextNodesCount[fromNodeId][toNodeId] = 1;
147
+ }
148
+ // update in and out connectors for both the nodes
149
+ this.inConnectors.get(toNodeId)?.set(id, connector);
150
+ this.outConnectors.get(fromNodeId)?.set(id, connector);
151
+ // increment total connectors count
152
+ this.connectorsCount += 1;
153
+ return this;
154
+ }
155
+ hasConnector(id) {
156
+ return this.connectors[id] !== undefined;
157
+ }
158
+ getConnector(id) {
159
+ return this.connectors[id];
160
+ }
161
+ removeConnector(id) {
162
+ const connector = this.connectors[id];
163
+ if (connector !== undefined) {
164
+ const { fromNodeId } = connector;
165
+ const { toNodeId } = connector;
166
+ delete this.connectors[id];
167
+ delete this.connectorData[id];
168
+ // update prev nodes count
169
+ this.prevNodesCount[toNodeId][fromNodeId] -= 1;
170
+ if (this.prevNodesCount[toNodeId][fromNodeId] === 0) {
171
+ delete this.prevNodesCount[toNodeId][fromNodeId];
172
+ }
173
+ // update next nodes count
174
+ this.nextNodesCount[fromNodeId][toNodeId] -= 1;
175
+ if (this.nextNodesCount[fromNodeId][toNodeId] === 0) {
176
+ delete this.nextNodesCount[fromNodeId][toNodeId];
177
+ }
178
+ this.inConnectors.get(toNodeId)?.delete(id);
179
+ this.outConnectors.get(fromNodeId)?.delete(id);
180
+ this.connectorsCount -= 1;
181
+ }
182
+ return this;
183
+ }
184
+ setConnector(id, data) {
185
+ // VALIDATE
186
+ // -connector with given id exists
187
+ // -node with given fromNodeId exists
188
+ // -node with given toNodeId exists
189
+ if (!this.getConnector(id)) {
190
+ throw new Error(`Connector with id '${id}' does not exist.`);
191
+ }
192
+ if (data.fromNodeId && !this.getNode(data.fromNodeId)) {
193
+ throw new Error(`Node with id '${data.fromNodeId}' does not exist, to update fromNodeId.`);
194
+ }
195
+ if (data.toNodeId && !this.getNode(data.toNodeId)) {
196
+ throw new Error(`Node with id '${data.toNodeId}' does not exist, to update toNodeId.`);
197
+ }
198
+ const connector = this.getConnector(id);
199
+ // current references
200
+ let { fromNodeId } = connector;
201
+ let { toNodeId } = connector;
202
+ // update prev nodes count - unset prev values
203
+ this.prevNodesCount[toNodeId][fromNodeId] -= 1;
204
+ if (this.prevNodesCount[toNodeId][fromNodeId] === 0) {
205
+ delete this.prevNodesCount[toNodeId][fromNodeId];
206
+ }
207
+ // update next nodes count - unset prev values
208
+ this.nextNodesCount[fromNodeId][toNodeId] -= 1;
209
+ if (this.nextNodesCount[fromNodeId][toNodeId] === 0) {
210
+ delete this.nextNodesCount[fromNodeId][toNodeId];
211
+ }
212
+ // remove prev references
213
+ this.inConnectors.get(toNodeId)?.delete(id);
214
+ this.outConnectors.get(fromNodeId)?.delete(id);
215
+ // new references
216
+ fromNodeId = data.fromNodeId ? data.fromNodeId : connector.fromNodeId;
217
+ toNodeId = data.toNodeId ? data.toNodeId : connector.toNodeId;
218
+ connector.fromNodeId = fromNodeId;
219
+ connector.toNodeId = toNodeId;
220
+ // update prev nodes count
221
+ if (this.prevNodesCount[toNodeId][fromNodeId]) {
222
+ this.prevNodesCount[toNodeId][fromNodeId] += 1;
223
+ }
224
+ else {
225
+ this.prevNodesCount[toNodeId][fromNodeId] = 1;
226
+ }
227
+ // update next nodes count
228
+ if (this.nextNodesCount[fromNodeId][toNodeId]) {
229
+ this.nextNodesCount[fromNodeId][toNodeId] += 1;
230
+ }
231
+ else {
232
+ this.nextNodesCount[fromNodeId][toNodeId] = 1;
233
+ }
234
+ // update in and out connectors for both the nodes
235
+ this.inConnectors.get(toNodeId)?.set(id, connector);
236
+ this.outConnectors.get(fromNodeId)?.set(id, connector);
237
+ return this;
238
+ }
239
+ getInConnectors(toNodeId, fromNodeId) {
240
+ const allInConnectors = this.inConnectors.get(toNodeId);
241
+ if (allInConnectors) {
242
+ const connectorValues = Array.from(allInConnectors.values());
243
+ /**
244
+ * sort the in-connectors based on first point's x-cord in ascending order
245
+ * to maintain relative order of connectors
246
+ * if connectorValues is an array of connectors of type PlottedGraphConnector
247
+ */
248
+ // connectorValues is generic type array so assertion is needed
249
+ if (isPlottedGraphConnector(connectorValues)) {
250
+ sortConnectors(connectorValues);
251
+ }
252
+ if (fromNodeId === undefined) {
253
+ return connectorValues;
254
+ }
255
+ return connectorValues.filter(connector => {
256
+ return connector.fromNodeId === fromNodeId;
257
+ });
258
+ }
259
+ return [];
260
+ }
261
+ getOutConnectors(fromNodeId, toNodeId) {
262
+ const allOutConnectors = this.outConnectors.get(fromNodeId);
263
+ if (allOutConnectors) {
264
+ const connectorValues = Array.from(allOutConnectors.values());
265
+ /**
266
+ * sort the out-connectors based on first point's x-cord in ascending order
267
+ * to maintain relative order of connectors
268
+ * if connectorValues is an array of connectors of type PlottedGraphConnector
269
+ */
270
+ // connectorValues is generic type array so assertion is needed
271
+ if (isPlottedGraphConnector(connectorValues)) {
272
+ sortConnectors(connectorValues);
273
+ }
274
+ if (toNodeId === undefined) {
275
+ return connectorValues;
276
+ }
277
+ return connectorValues.filter(connector => {
278
+ return connector.toNodeId === toNodeId;
279
+ });
280
+ }
281
+ return [];
282
+ }
283
+ getAllNodeConnectors(nodeId) {
284
+ const inConnectors = this.getInConnectors(nodeId);
285
+ if (inConnectors) {
286
+ return inConnectors.concat(this.getOutConnectors(nodeId));
287
+ }
288
+ return [];
289
+ }
290
+ }
291
+ //# sourceMappingURL=Graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../../../src/components/FlowModeller/Renderer/Utils/Graph.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PlottedGraphConnector, PlottedGraphNode } from './GraphLayout';\n\nexport interface ConnectorProps<T = unknown> {\n id: string;\n fromNodeId: string;\n toNodeId: string;\n label?: string;\n data?: T;\n}\nexport interface NodeType {\n minConnectors: number;\n}\nexport interface Node<T = unknown> {\n type?: NodeType;\n id: string;\n label?: string;\n data?: T;\n reference?: string;\n}\n\nexport interface GraphData<T extends Node = Node, U extends ConnectorProps = ConnectorProps> {\n nodes: T[];\n connectors: U[];\n}\n\n// sort given connectors based on first point x-cord in ascending order\nexport const sortConnectors = (connectors: PlottedGraphConnector[]) => {\n if (connectors.length > 1) {\n connectors.sort((a, b) =>\n a.points.length && b.points.length ? a.points[0].x - b.points[0].x : 0\n );\n }\n};\n\n// Type guard to check if connector is of type PlottedGraphConnector\nexport const isPlottedGraphConnector = (\n connectors: (ConnectorProps | PlottedGraphConnector)[]\n): connectors is PlottedGraphConnector[] => connectors.length > 0 && 'points' in connectors[0];\n\nexport class DirectedGraph<\n T extends Node | PlottedGraphNode = Node,\n U extends ConnectorProps | PlottedGraphConnector = ConnectorProps,\n D1 = unknown,\n D2 = unknown\n> {\n private nodes: Record<string, T> = {};\n private connectors: Record<string, U> = {};\n\n // additional way to maintain related data - for cases where Graph is used for indirect purposes\n private nodeData: Record<string, D1 | unknown> = {};\n private connectorData: Record<string, D2 | unknown> = {};\n\n private inConnectors: Map<string, Map<string, U>> = new Map(); // we are maintaining connector reference instead of id, to avoid iterations later on.\n private prevNodesCount: Record<string, Record<string, number>> = {};\n\n private outConnectors: Map<string, Map<string, U>> = new Map(); // we are maintaining connector reference instead of id, to avoid iterations later on\n private nextNodesCount: Record<string, Record<string, number>> = {};\n\n private nodeCount = 0;\n private connectorsCount = 0;\n\n constructor(graphData: GraphData<T, U> = { nodes: [], connectors: [] }) {\n // Not necessary to clone, as this class never modifies any nodes\n graphData.nodes.forEach(item => this.addNode(item));\n // copy/clone, connectors properties 'fromNodeId' and 'toNodeId' values may get modified by this class\n graphData.connectors.forEach(item => {\n const { data } = item;\n const newItem = JSON.parse(JSON.stringify(item));\n\n // below statement is necessary to retain the actual references of any function/instances if any\n newItem.data = data;\n\n this.addConnector(newItem);\n });\n }\n\n getGraphData(): GraphData<T, U> {\n return {\n nodes: this.getNodes(),\n connectors: this.getConnectors()\n };\n }\n\n getNodeCount(): number {\n return this.nodeCount;\n }\n\n getNodes() {\n return Object.values(this.nodes);\n }\n\n addNode(node: T, data?: D1): DirectedGraph {\n if (this.nodes[node.id] !== undefined) {\n this.nodes[node.id] = node;\n this.nodeData[node.id] = data;\n } else {\n this.nodes[node.id] = node;\n this.nodeData[node.id] = data;\n\n this.inConnectors.set(node.id, new Map());\n this.prevNodesCount[node.id] = {};\n\n this.outConnectors.set(node.id, new Map());\n this.nextNodesCount[node.id] = {};\n\n this.nodeCount += 1;\n }\n\n return this;\n }\n\n getNode(nodeId: string): T {\n return this.nodes[nodeId];\n }\n\n hasNode(nodeId: string): boolean {\n return this.nodes[nodeId] !== undefined;\n }\n\n deleteNode(nodeId: string, ignoreConnectors = false): DirectedGraph<T, U> {\n if (this.hasNode(nodeId)) {\n delete this.nodes[nodeId];\n delete this.nodeData[nodeId];\n\n if (ignoreConnectors !== true) {\n const removeConnector = (id: string) => this.removeConnector(id);\n\n // IMP NOTE its the responsibility of the callee to make sure that the connectors are cleanly reassigned, or else all attached connectors will be deleted\n const inConnectors = this.inConnectors.get(nodeId);\n if (inConnectors) {\n Array.from(inConnectors.keys()).forEach(removeConnector);\n }\n this.inConnectors.delete(nodeId);\n delete this.prevNodesCount[nodeId];\n\n const outConnectors = this.outConnectors.get(nodeId);\n if (outConnectors) {\n Array.from(outConnectors.keys()).forEach(removeConnector);\n }\n this.outConnectors.delete(nodeId);\n delete this.nextNodesCount[nodeId];\n }\n\n this.nodeCount -= 1;\n }\n\n return this;\n }\n\n getPrevNodes(nodeId: string): T[] {\n return this.prevNodesCount[nodeId]\n ? Object.keys(this.prevNodesCount[nodeId]).map(id => this.getNode(id))\n : [];\n }\n\n getNextNodes(nodeId: string): T[] {\n return this.nextNodesCount[nodeId]\n ? Object.keys(this.nextNodesCount[nodeId]).map(id => this.getNode(id))\n : [];\n }\n\n getPrevNodesCount(nodeId: string): number {\n return (this.prevNodesCount[nodeId] ? Object.values(this.prevNodesCount[nodeId]) : []).reduce(\n (prev, current) => prev + current,\n 0\n );\n }\n\n getNextNodesCount(nodeId: string): number {\n return (this.nextNodesCount[nodeId] ? Object.values(this.nextNodesCount[nodeId]) : []).reduce(\n (prev, current) => prev + current,\n 0\n );\n }\n\n isLeaf(nodeId: string): boolean {\n return this.getNextNodes(nodeId).length === 0;\n }\n\n // -- Connectors\n getConnectorsCount(): number {\n return this.connectorsCount;\n }\n\n getConnectors() {\n return Object.values(this.connectors);\n }\n\n addConnector(connector: U, data?: D2): DirectedGraph<T, U> {\n if (this.connectors[connector.id] !== undefined) {\n // update the map\n this.connectors[connector.id] = connector;\n this.connectorData[connector.id] = data;\n\n return this;\n }\n\n const { id } = connector;\n const { fromNodeId } = connector;\n const { toNodeId } = connector;\n\n // check if nodes with given ids exist\n if (this.nodes[fromNodeId] === undefined || this.nodes[toNodeId] === undefined) {\n throw new Error(\n `One or more nodes does not exist, cannot add connector ${fromNodeId}-${toNodeId}`\n );\n }\n\n // add it to the map\n this.connectors[id] = connector;\n this.connectorData[id] = data;\n\n // update prev nodes count\n if (this.prevNodesCount[toNodeId][fromNodeId]) {\n this.prevNodesCount[toNodeId][fromNodeId] += 1;\n } else {\n this.prevNodesCount[toNodeId][fromNodeId] = 1;\n }\n\n // update next nodes count\n if (this.nextNodesCount[fromNodeId][toNodeId]) {\n this.nextNodesCount[fromNodeId][toNodeId] += 1;\n } else {\n this.nextNodesCount[fromNodeId][toNodeId] = 1;\n }\n\n // update in and out connectors for both the nodes\n this.inConnectors.get(toNodeId)?.set(id, connector);\n this.outConnectors.get(fromNodeId)?.set(id, connector);\n\n // increment total connectors count\n this.connectorsCount += 1;\n\n return this;\n }\n\n hasConnector(id: string): boolean {\n return this.connectors[id] !== undefined;\n }\n\n getConnector(id: string): U {\n return this.connectors[id];\n }\n\n removeConnector(id: string): DirectedGraph<T, U> {\n const connector = this.connectors[id];\n\n if (connector !== undefined) {\n const { fromNodeId } = connector;\n const { toNodeId } = connector;\n\n delete this.connectors[id];\n delete this.connectorData[id];\n\n // update prev nodes count\n this.prevNodesCount[toNodeId][fromNodeId] -= 1;\n if (this.prevNodesCount[toNodeId][fromNodeId] === 0) {\n delete this.prevNodesCount[toNodeId][fromNodeId];\n }\n\n // update next nodes count\n this.nextNodesCount[fromNodeId][toNodeId] -= 1;\n if (this.nextNodesCount[fromNodeId][toNodeId] === 0) {\n delete this.nextNodesCount[fromNodeId][toNodeId];\n }\n\n this.inConnectors.get(toNodeId)?.delete(id);\n this.outConnectors.get(fromNodeId)?.delete(id);\n\n this.connectorsCount -= 1;\n }\n\n return this;\n }\n\n setConnector(id: string, data: { fromNodeId?: string; toNodeId?: string }): DirectedGraph<T, U> {\n // VALIDATE\n // -connector with given id exists\n // -node with given fromNodeId exists\n // -node with given toNodeId exists\n if (!this.getConnector(id)) {\n throw new Error(`Connector with id '${id}' does not exist.`);\n }\n if (data.fromNodeId && !this.getNode(data.fromNodeId)) {\n throw new Error(`Node with id '${data.fromNodeId}' does not exist, to update fromNodeId.`);\n }\n if (data.toNodeId && !this.getNode(data.toNodeId)) {\n throw new Error(`Node with id '${data.toNodeId}' does not exist, to update toNodeId.`);\n }\n\n const connector = this.getConnector(id);\n\n // current references\n let { fromNodeId } = connector;\n let { toNodeId } = connector;\n\n // update prev nodes count - unset prev values\n this.prevNodesCount[toNodeId][fromNodeId] -= 1;\n if (this.prevNodesCount[toNodeId][fromNodeId] === 0) {\n delete this.prevNodesCount[toNodeId][fromNodeId];\n }\n\n // update next nodes count - unset prev values\n this.nextNodesCount[fromNodeId][toNodeId] -= 1;\n if (this.nextNodesCount[fromNodeId][toNodeId] === 0) {\n delete this.nextNodesCount[fromNodeId][toNodeId];\n }\n\n // remove prev references\n this.inConnectors.get(toNodeId)?.delete(id);\n this.outConnectors.get(fromNodeId)?.delete(id);\n\n // new references\n fromNodeId = data.fromNodeId ? data.fromNodeId : connector.fromNodeId;\n toNodeId = data.toNodeId ? data.toNodeId : connector.toNodeId;\n\n connector.fromNodeId = fromNodeId;\n connector.toNodeId = toNodeId;\n\n // update prev nodes count\n if (this.prevNodesCount[toNodeId][fromNodeId]) {\n this.prevNodesCount[toNodeId][fromNodeId] += 1;\n } else {\n this.prevNodesCount[toNodeId][fromNodeId] = 1;\n }\n\n // update next nodes count\n if (this.nextNodesCount[fromNodeId][toNodeId]) {\n this.nextNodesCount[fromNodeId][toNodeId] += 1;\n } else {\n this.nextNodesCount[fromNodeId][toNodeId] = 1;\n }\n\n // update in and out connectors for both the nodes\n this.inConnectors.get(toNodeId)?.set(id, connector);\n this.outConnectors.get(fromNodeId)?.set(id, connector);\n\n return this;\n }\n\n getInConnectors(toNodeId: string, fromNodeId?: string): U[] {\n const allInConnectors = this.inConnectors.get(toNodeId);\n\n if (allInConnectors) {\n const connectorValues = Array.from(allInConnectors.values());\n\n /**\n * sort the in-connectors based on first point's x-cord in ascending order\n * to maintain relative order of connectors\n * if connectorValues is an array of connectors of type PlottedGraphConnector\n */\n // connectorValues is generic type array so assertion is needed\n if (isPlottedGraphConnector(connectorValues)) {\n sortConnectors(connectorValues);\n }\n\n if (fromNodeId === undefined) {\n return connectorValues;\n }\n\n return connectorValues.filter(connector => {\n return connector.fromNodeId === fromNodeId;\n });\n }\n\n return [];\n }\n\n getOutConnectors(fromNodeId: string, toNodeId?: string): U[] {\n const allOutConnectors = this.outConnectors.get(fromNodeId);\n\n if (allOutConnectors) {\n const connectorValues = Array.from(allOutConnectors.values());\n\n /**\n * sort the out-connectors based on first point's x-cord in ascending order\n * to maintain relative order of connectors\n * if connectorValues is an array of connectors of type PlottedGraphConnector\n */\n // connectorValues is generic type array so assertion is needed\n if (isPlottedGraphConnector(connectorValues)) {\n sortConnectors(connectorValues);\n }\n\n if (toNodeId === undefined) {\n return connectorValues;\n }\n\n return connectorValues.filter(connector => {\n return connector.toNodeId === toNodeId;\n });\n }\n\n return [];\n }\n\n getAllNodeConnectors(nodeId: string) {\n const inConnectors = this.getInConnectors(nodeId);\n\n if (inConnectors) {\n return inConnectors.concat(this.getOutConnectors(nodeId));\n }\n return [];\n }\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import type { ConnectorProps, GraphData, Node } from './Graph';
2
+ export interface PlottedGraphNode<T = unknown> extends Node<T> {
3
+ dimensions: {
4
+ width: number;
5
+ height: number;
6
+ };
7
+ position: {
8
+ x: number;
9
+ y: number;
10
+ };
11
+ referencedNode?: T;
12
+ }
13
+ export interface PlottedGraphConnector<T = unknown> extends ConnectorProps<T> {
14
+ points: {
15
+ x: number;
16
+ y: number;
17
+ }[];
18
+ labelLayout?: {
19
+ value: string;
20
+ width: number;
21
+ height: number;
22
+ x: number;
23
+ y: number;
24
+ };
25
+ }
26
+ export declare const GraphLayoutDirection: {
27
+ LeftToRight: string;
28
+ TopToBottom: string;
29
+ };
30
+ export type GraphLayoutDirectionType = (typeof GraphLayoutDirection)[keyof typeof GraphLayoutDirection];
31
+ export default class GraphLayout {
32
+ static plot<T extends GraphData<PlottedGraphNode, PlottedGraphConnector>>(graphData: T, readOnly?: boolean, direction?: GraphLayoutDirectionType): {
33
+ width: any;
34
+ height: any;
35
+ };
36
+ }
37
+ //# sourceMappingURL=GraphLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphLayout.d.ts","sourceRoot":"","sources":["../../../../../src/components/FlowModeller/Renderer/Utils/GraphLayout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,IAAI,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE;QACR,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,cAAc,CAAC,EAAE,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAC3E,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB;;;CAGhC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAClC,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAKnE,MAAM,CAAC,OAAO,OAAO,WAAW;IAE9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,SAAS,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,EACtE,SAAS,EAAE,CAAC,EACZ,QAAQ,GAAE,OAAe,EACzB,SAAS,GAAE,wBAA2D;;;;CAmIzE"}
@@ -0,0 +1,114 @@
1
+ // cspell:words marginx, marginy, lablepos
2
+ import dagre from '@dagrejs/dagre';
3
+ export const GraphLayoutDirection = {
4
+ LeftToRight: 'LR',
5
+ TopToBottom: 'TB'
6
+ };
7
+ const DEFAULT_GRAPH_WIDTH = 2000;
8
+ const DEFAULT_GRAPH_HEIGHT = 2000;
9
+ export default class GraphLayout {
10
+ // Using Dagre layouting
11
+ static plot(graphData, readOnly = false, direction = GraphLayoutDirection.TopToBottom) {
12
+ const dagreGraph = new dagre.graphlib.Graph({ multigraph: true });
13
+ dagreGraph.setDefaultEdgeLabel(() => ({}));
14
+ const defaultNodeWidth = 280;
15
+ const defaultNodeHeight = 112;
16
+ dagreGraph.setGraph({
17
+ rankdir: direction,
18
+ ranksep: readOnly ? 2 : 4,
19
+ edgesep: defaultNodeWidth / 2,
20
+ nodesep: 20,
21
+ marginx: 200,
22
+ marginy: 32
23
+ });
24
+ graphData.nodes.forEach(node => {
25
+ dagreGraph.setNode(node.id, {
26
+ width: node.dimensions.width ?? defaultNodeWidth,
27
+ height: node.dimensions.height ?? defaultNodeHeight
28
+ });
29
+ });
30
+ graphData.connectors.forEach((con, index) => {
31
+ dagreGraph.setEdge(con.fromNodeId, con.toNodeId, {
32
+ weight: 1,
33
+ minlen: 2,
34
+ label: con.data &&
35
+ typeof con.data === 'object' &&
36
+ 'label' in con.data &&
37
+ typeof con.data.label === 'string'
38
+ ? con.data.label
39
+ : '',
40
+ width: 250,
41
+ height: con.data && typeof con.data === 'object' && 'label' in con.data ? 90 : 40,
42
+ lablepos: 'c',
43
+ labeloffset: 0
44
+ }, index.toString());
45
+ });
46
+ dagre.layout(dagreGraph, { disableOptimalOrderHeuristic: true });
47
+ graphData.nodes.forEach(el => {
48
+ const node = dagreGraph.node(el.id);
49
+ el.position.x = node.x - el.dimensions.width / 2;
50
+ el.position.y = node.y - el.dimensions.height / 2;
51
+ });
52
+ graphData.connectors.forEach((con, index) => {
53
+ const edge = dagreGraph.edge(con.fromNodeId, con.toNodeId, index.toString());
54
+ con.labelLayout = {
55
+ value: edge.label,
56
+ x: edge.x,
57
+ y: edge.y,
58
+ width: edge.width,
59
+ height: edge.height
60
+ };
61
+ const lastIndex = edge.points.length - 1;
62
+ let firstPoint = edge.points[0];
63
+ const secondPoint = edge.points[1];
64
+ let lastPoint = edge.points[lastIndex];
65
+ const secondLastPoint = edge.points[lastIndex - 1];
66
+ const fromNode = dagreGraph.node(con.fromNodeId);
67
+ const toNode = dagreGraph.node(con.toNodeId);
68
+ firstPoint =
69
+ firstPoint.x !== secondPoint.x
70
+ ? {
71
+ ...edge.points[0],
72
+ x: fromNode.x,
73
+ y: edge.points[1].y
74
+ }
75
+ : firstPoint;
76
+ lastPoint =
77
+ lastPoint.x !== secondLastPoint.x
78
+ ? {
79
+ ...edge.points[lastIndex],
80
+ x: toNode.x,
81
+ y: edge.points[lastIndex - 1].y
82
+ }
83
+ : lastPoint;
84
+ con.points = [
85
+ { x: fromNode.x, y: fromNode.y + fromNode.height / 2 },
86
+ { ...firstPoint, y: firstPoint.y + 10 },
87
+ { ...secondPoint, y: secondPoint.y + 10 },
88
+ ...edge.points.slice(2, lastIndex),
89
+ lastPoint
90
+ ];
91
+ // Only add the last point incase the edge has an arc at end
92
+ if (edge.points[lastIndex].x !== edge.points[lastIndex - 1].x) {
93
+ con.points.push({ x: toNode.x, y: toNode.y });
94
+ }
95
+ // if current edge source node is an placeholder node move down the starting point of placeholder node by 12
96
+ if (fromNode.height === 0) {
97
+ con.points[0].y += 12;
98
+ }
99
+ const edgeLastPointIndex = con.points.length - 1;
100
+ // Move the merging arcs last point to the starting point of placeholder node
101
+ if (con.points[edgeLastPointIndex].x === con.points[edgeLastPointIndex - 1].x &&
102
+ toNode.height === 0) {
103
+ con.points[edgeLastPointIndex].y += 12;
104
+ }
105
+ });
106
+ const { width } = dagreGraph.graph();
107
+ const { height } = dagreGraph.graph();
108
+ return {
109
+ width: Number.isFinite(width) ? width : DEFAULT_GRAPH_WIDTH,
110
+ height: Number.isFinite(height) ? height : DEFAULT_GRAPH_HEIGHT
111
+ };
112
+ }
113
+ }
114
+ //# sourceMappingURL=GraphLayout.js.map