@likec4/diagram 1.19.2 → 1.20.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 (581) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.css.js +1 -5
  3. package/dist/LikeC4Diagram.d.ts +1 -4
  4. package/dist/LikeC4Diagram.js +102 -147
  5. package/dist/LikeC4Diagram.props.d.ts +10 -16
  6. package/dist/LikeC4Search.js +7 -15
  7. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  8. package/dist/base/Background.d.ts +7 -0
  9. package/dist/{xyflow/XYFlowBackground.js → base/Background.js} +5 -6
  10. package/dist/base/BaseXYFlow.d.ts +14 -0
  11. package/dist/base/BaseXYFlow.js +146 -0
  12. package/dist/base/example/RelationshipsBrowser.d.ts +6 -0
  13. package/dist/base/example/_types.d.ts +20 -0
  14. package/dist/base/example/custom.d.ts +71 -0
  15. package/dist/base/example/useViewToNodesEdges.d.ts +6 -0
  16. package/dist/base/index.d.ts +2 -0
  17. package/dist/base/primitives/NodeHandles.d.ts +4 -0
  18. package/dist/base/primitives/NodeHandles.js +14 -0
  19. package/dist/base/primitives/compound/CompoundActionButton.css.d.ts +3 -0
  20. package/dist/base/primitives/compound/CompoundActionButton.css.js +9 -0
  21. package/dist/base/primitives/compound/CompoundActionButton.d.ts +7 -0
  22. package/dist/base/primitives/compound/CompoundActionButton.js +48 -0
  23. package/dist/base/primitives/compound/CompoundDetailsButton.css.d.ts +3 -0
  24. package/dist/base/primitives/compound/CompoundDetailsButton.css.js +9 -0
  25. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +7 -0
  26. package/dist/base/primitives/compound/CompoundDetailsButton.js +50 -0
  27. package/dist/base/primitives/compound/CompoundNodeContainer.css.d.ts +9 -0
  28. package/dist/base/primitives/compound/CompoundNodeContainer.css.js +17 -0
  29. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +26 -0
  30. package/dist/base/primitives/compound/CompoundNodeContainer.js +86 -0
  31. package/dist/base/primitives/compound/CompoundTitle.css.d.ts +2 -0
  32. package/dist/base/primitives/compound/CompoundTitle.css.js +7 -0
  33. package/dist/base/primitives/compound/CompoundTitle.d.ts +6 -0
  34. package/dist/base/primitives/compound/CompoundTitle.js +20 -0
  35. package/dist/base/primitives/customEdge.d.ts +41 -0
  36. package/dist/base/primitives/customEdge.js +13 -0
  37. package/dist/base/primitives/customNode.d.ts +7 -0
  38. package/dist/base/primitives/customNode.js +10 -0
  39. package/dist/base/primitives/edge/EdgeActionButton.d.ts +7 -0
  40. package/dist/base/primitives/edge/EdgeActionButton.js +24 -0
  41. package/dist/base/primitives/edge/EdgeContainer.d.ts +10 -0
  42. package/dist/base/primitives/edge/EdgeContainer.js +35 -0
  43. package/dist/{xyflow/edges/edges.css.d.ts → base/primitives/edge/EdgeLabel.css.d.ts} +5 -9
  44. package/dist/base/primitives/edge/EdgeLabel.css.js +25 -0
  45. package/dist/base/primitives/edge/EdgeLabel.d.ts +51 -0
  46. package/dist/base/primitives/edge/EdgeLabel.js +90 -0
  47. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.d.ts +2 -0
  48. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.js +29 -1
  49. package/dist/base/primitives/edge/EdgePath.d.ts +44 -0
  50. package/dist/base/primitives/edge/EdgePath.js +77 -0
  51. package/dist/base/primitives/edge/edge.css.d.ts +6 -0
  52. package/dist/base/primitives/edge/edge.css.js +14 -0
  53. package/dist/base/primitives/element/ElementActionButtons.css.d.ts +3 -0
  54. package/dist/base/primitives/element/ElementActionButtons.css.js +9 -0
  55. package/dist/base/primitives/element/ElementActionButtons.d.ts +13 -0
  56. package/dist/base/primitives/element/ElementActionButtons.js +62 -0
  57. package/dist/base/primitives/element/ElementDetailsButton.css.d.ts +3 -0
  58. package/dist/base/primitives/element/ElementDetailsButton.css.js +9 -0
  59. package/dist/base/primitives/element/ElementDetailsButton.d.ts +7 -0
  60. package/dist/base/primitives/element/ElementDetailsButton.js +54 -0
  61. package/dist/base/primitives/element/ElementNodeContainer.css.d.ts +3 -0
  62. package/dist/base/primitives/element/ElementNodeContainer.css.js +7 -0
  63. package/dist/base/primitives/element/ElementNodeContainer.d.ts +26 -0
  64. package/dist/base/primitives/element/ElementNodeContainer.js +60 -0
  65. package/dist/base/primitives/element/ElementShape.css.d.ts +6 -0
  66. package/dist/base/primitives/element/ElementShape.css.js +14 -0
  67. package/dist/base/primitives/element/ElementShape.d.ts +28 -0
  68. package/dist/{xyflow/nodes/element/ElementShapeSvg.js → base/primitives/element/ElementShape.js} +23 -7
  69. package/dist/base/primitives/element/ElementTitle.css.d.ts +8 -0
  70. package/dist/base/primitives/element/ElementTitle.css.js +19 -0
  71. package/dist/base/primitives/element/ElementTitle.d.ts +10 -0
  72. package/dist/base/primitives/element/ElementTitle.js +66 -0
  73. package/dist/base/primitives/index.d.ts +17 -0
  74. package/dist/base/types.d.ts +90 -0
  75. package/dist/base/types.js +54 -0
  76. package/dist/base/updateEdges.d.ts +3 -0
  77. package/dist/base/updateEdges.js +31 -0
  78. package/dist/base/updateNodes.d.ts +3 -0
  79. package/dist/base/updateNodes.js +36 -0
  80. package/dist/base/xyflowMachine.d.ts +212 -0
  81. package/dist/context/DiagramEventHandlers.d.ts +10 -0
  82. package/dist/context/DiagramEventHandlers.js +49 -0
  83. package/dist/context/DiagramFeatures.d.ts +31 -0
  84. package/dist/context/DiagramFeatures.js +140 -0
  85. package/dist/{ui → context}/FramerMotionConfig.js +2 -4
  86. package/dist/context/IconRenderer.d.ts +11 -0
  87. package/dist/{xyflow/nodes/shared/ElementIcon.js → context/IconRenderer.js} +14 -14
  88. package/dist/context/RootContainer.d.ts +9 -0
  89. package/dist/context/RootContainer.js +20 -0
  90. package/dist/context/index.d.ts +7 -0
  91. package/dist/globals.css.js +0 -86
  92. package/dist/hooks/index.d.ts +7 -5
  93. package/dist/hooks/useCurrentViewId.d.ts +2 -0
  94. package/dist/hooks/useCurrentViewId.js +8 -0
  95. package/dist/hooks/useDiagram.d.ts +10725 -0
  96. package/dist/hooks/useDiagram.js +119 -0
  97. package/dist/hooks/useDiagramActor.d.ts +5 -0
  98. package/dist/hooks/useDiagramActor.js +21 -0
  99. package/dist/hooks/useDiagramContext.d.ts +3 -0
  100. package/dist/hooks/useDiagramContext.js +10 -0
  101. package/dist/hooks/useMantinePortalProps.js +2 -2
  102. package/dist/hooks/useXYFlow.d.ts +195 -37
  103. package/dist/hooks/useXYFlow.js +4 -6
  104. package/dist/index.d.ts +3 -2
  105. package/dist/index.js +5 -6
  106. package/dist/likec4diagram/DiagramActor.d.ts +7 -0
  107. package/dist/likec4diagram/DiagramActor.js +71 -0
  108. package/dist/likec4diagram/DiagramUI.d.ts +2 -0
  109. package/dist/likec4diagram/DiagramUI.js +22 -0
  110. package/dist/likec4diagram/XYFlow.d.ts +6 -0
  111. package/dist/likec4diagram/XYFlow.js +122 -0
  112. package/dist/likec4diagram/custom/edges/NotePopover.css.d.ts +2 -0
  113. package/dist/likec4diagram/custom/edges/NotePopover.css.js +7 -0
  114. package/dist/likec4diagram/custom/edges/NotePopover.d.ts +4 -0
  115. package/dist/likec4diagram/custom/edges/NotePopover.js +101 -0
  116. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +55 -0
  117. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +307 -0
  118. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.js +4 -4
  119. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.d.ts +5 -5
  120. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.js +51 -53
  121. package/dist/likec4diagram/custom/edges/edges.css.d.ts +2 -0
  122. package/dist/likec4diagram/custom/edges/edges.css.js +7 -0
  123. package/dist/likec4diagram/custom/edges/utils.d.ts +22 -0
  124. package/dist/likec4diagram/custom/edges/utils.js +25 -0
  125. package/dist/likec4diagram/custom/index.d.ts +57 -0
  126. package/dist/likec4diagram/custom/index.js +7 -0
  127. package/dist/likec4diagram/custom/nodes/CompoundActions.d.ts +5 -0
  128. package/dist/likec4diagram/custom/nodes/CompoundActions.js +25 -0
  129. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +7 -0
  130. package/dist/likec4diagram/custom/nodes/ElementActions.js +69 -0
  131. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +10 -0
  132. package/dist/likec4diagram/custom/nodes/nodeTypes.js +94 -0
  133. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +21 -0
  134. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +159 -0
  135. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.d.ts +7 -0
  136. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +128 -0
  137. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.d.ts +7 -0
  138. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +149 -0
  139. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +8 -0
  140. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +66 -0
  141. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +40 -0
  142. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +131 -0
  143. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.d.ts +1 -0
  144. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +5 -0
  145. package/dist/likec4diagram/state/actorContext.d.ts +50849 -0
  146. package/dist/likec4diagram/state/actorContext.js +12 -0
  147. package/dist/{state → likec4diagram/state}/aligners.d.ts +4 -1
  148. package/dist/{state → likec4diagram/state}/aligners.js +31 -5
  149. package/dist/likec4diagram/state/assign.d.ts +18 -0
  150. package/dist/likec4diagram/state/assign.js +343 -0
  151. package/dist/likec4diagram/state/hotkeyActor.d.ts +5 -0
  152. package/dist/likec4diagram/state/hotkeyActor.js +18 -0
  153. package/dist/likec4diagram/state/inspector.d.ts +5 -0
  154. package/dist/likec4diagram/state/machine.d.ts +10751 -0
  155. package/dist/likec4diagram/state/machine.js +783 -0
  156. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +113 -0
  157. package/dist/likec4diagram/state/syncManualLayoutActor.js +178 -0
  158. package/dist/likec4diagram/state/utils.d.ts +8 -0
  159. package/dist/likec4diagram/state/utils.js +48 -0
  160. package/dist/likec4diagram/types.d.ts +74 -0
  161. package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.js +11 -10
  162. package/dist/likec4diagram/ui/controls/Controls.d.ts +2 -0
  163. package/dist/likec4diagram/ui/controls/Controls.js +102 -0
  164. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.d.ts +2 -0
  165. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +43 -0
  166. package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.js +11 -11
  167. package/dist/likec4diagram/ui/controls/NavigationButtons.d.ts +1 -0
  168. package/dist/likec4diagram/ui/controls/NavigationButtons.js +92 -0
  169. package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.js +2 -1
  170. package/dist/{ui/top-left → likec4diagram/ui/controls}/styles.css.d.ts +1 -1
  171. package/dist/likec4diagram/ui/controls/styles.css.js +17 -0
  172. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.js +11 -0
  173. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.d.ts +1 -0
  174. package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.js +3 -3
  175. package/dist/likec4diagram/ui/diagram-title/Link.d.ts +4 -0
  176. package/dist/likec4diagram/ui/index.d.ts +2 -0
  177. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +13 -0
  178. package/dist/likec4diagram/ui/notation/NotationPanel.d.ts +2 -0
  179. package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.js +23 -31
  180. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.js +4 -4
  181. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.js +19 -44
  182. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.d.ts +11 -6
  183. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.js +17 -12
  184. package/dist/likec4diagram/useViewToNodesEdges.d.ts +11 -0
  185. package/dist/likec4diagram/useViewToNodesEdges.js +245 -0
  186. package/dist/likec4model/index.d.ts +1 -1
  187. package/dist/likec4model/useLikeC4Model.d.ts +1 -11
  188. package/dist/likec4model/useLikeC4Model.js +1 -39
  189. package/dist/overlays/Overlays.js +61 -105
  190. package/dist/overlays/element-details/ElementDetailsCard.js +111 -116
  191. package/dist/overlays/element-details/TabPanelDeployments.js +4 -7
  192. package/dist/overlays/element-details/TabPanelRelationships.css.js +0 -2
  193. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  194. package/dist/overlays/element-details/TabPanelRelationships.js +35 -64
  195. package/dist/overlays/element-details/TabPanelStructure.d.ts +2 -2
  196. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  197. package/dist/overlays/overlay/Overlay.css.d.ts +2 -0
  198. package/dist/overlays/overlay/Overlay.css.js +93 -0
  199. package/dist/overlays/overlay/Overlay.d.ts +8 -0
  200. package/dist/overlays/overlay/Overlay.js +86 -0
  201. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +5 -0
  202. package/dist/overlays/relationship-details/RelationshipDetails.js +189 -0
  203. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.css.d.ts +1 -0
  204. package/dist/overlays/relationship-details/SelectEdge.css.js +17 -0
  205. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.d.ts +1 -1
  206. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.js +8 -8
  207. package/dist/overlays/relationship-details/_types.d.ts +36 -0
  208. package/dist/overlays/relationship-details/actor.d.ts +41 -0
  209. package/dist/overlays/relationship-details/actor.js +113 -0
  210. package/dist/overlays/relationship-details/custom/ElementActions.d.ts +5 -0
  211. package/dist/overlays/relationship-details/custom/ElementActions.js +33 -0
  212. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +49 -0
  213. package/dist/overlays/relationship-details/custom/edgeTypes.js +51 -0
  214. package/dist/overlays/relationship-details/custom/index.d.ts +2 -0
  215. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +39 -0
  216. package/dist/overlays/relationship-details/custom/nodeTypes.js +89 -0
  217. package/dist/overlays/relationship-details/custom/styles.css.d.ts +1 -0
  218. package/dist/overlays/relationship-details/hooks.d.ts +59 -0
  219. package/dist/overlays/relationship-details/hooks.js +46 -0
  220. package/dist/overlays/{edge-details/use-layouted-edge-details.d.ts → relationship-details/useLayoutedDetails.d.ts} +4 -6
  221. package/dist/overlays/{edge-details/use-layouted-edge-details.js → relationship-details/useLayoutedDetails.js} +68 -64
  222. package/dist/overlays/relationships-browser/-useRelationshipsView.d.ts +39 -0
  223. package/dist/overlays/relationships-browser/-useRelationshipsView.js +488 -0
  224. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +5 -0
  225. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +209 -0
  226. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.css.d.ts +1 -0
  227. package/dist/overlays/relationships-browser/SelectElement.css.js +9 -0
  228. package/dist/overlays/relationships-browser/SelectElement.d.ts +7 -0
  229. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.js +11 -7
  230. package/dist/overlays/relationships-browser/_types.d.ts +40 -0
  231. package/dist/overlays/relationships-browser/actor.d.ts +66 -0
  232. package/dist/overlays/relationships-browser/actor.js +159 -0
  233. package/dist/overlays/relationships-browser/custom/ElementActions.d.ts +5 -0
  234. package/dist/overlays/relationships-browser/custom/ElementActions.js +43 -0
  235. package/dist/overlays/relationships-browser/custom/EmptyNode.d.ts +5 -0
  236. package/dist/overlays/{relationships-of/xyflow → relationships-browser/custom}/EmptyNode.js +1 -3
  237. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +46 -0
  238. package/dist/overlays/relationships-browser/custom/edgeTypes.js +51 -0
  239. package/dist/overlays/relationships-browser/custom/index.d.ts +2 -0
  240. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +45 -0
  241. package/dist/overlays/relationships-browser/custom/nodeTypes.js +93 -0
  242. package/dist/overlays/relationships-browser/custom/styles.css.d.ts +1 -0
  243. package/dist/overlays/relationships-browser/custom/styles.css.js +5 -0
  244. package/dist/overlays/relationships-browser/hooks.d.ts +62 -0
  245. package/dist/overlays/relationships-browser/hooks.js +46 -0
  246. package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +10 -0
  247. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +160 -0
  248. package/dist/style.css +1 -1
  249. package/dist/utils/index.d.ts +4 -0
  250. package/dist/{xyflow/utils.d.ts → utils/xyflow.d.ts} +4 -4
  251. package/dist/{xyflow/utils.js → utils/xyflow.js} +14 -20
  252. package/package.json +23 -20
  253. package/src/LikeC4Diagram.css.ts +21 -15
  254. package/src/LikeC4Diagram.props.ts +14 -21
  255. package/src/LikeC4Diagram.tsx +105 -150
  256. package/src/LikeC4Search.tsx +21 -28
  257. package/src/StaticLikeC4Diagram.tsx +0 -1
  258. package/src/{xyflow/XYFlowBackground.tsx → base/Background.tsx} +8 -8
  259. package/src/base/BaseXYFlow.tsx +200 -0
  260. package/src/{xyflow → base}/const.ts +1 -1
  261. package/src/base/example/RelationshipsBrowser.tsx +62 -0
  262. package/src/base/example/_types.ts +71 -0
  263. package/src/base/example/custom.tsx +58 -0
  264. package/src/base/example/useViewToNodesEdges.ts +193 -0
  265. package/src/base/index.ts +10 -0
  266. package/src/base/primitives/NodeHandles.tsx +18 -0
  267. package/src/base/primitives/compound/CompoundActionButton.css.ts +55 -0
  268. package/src/base/primitives/compound/CompoundActionButton.tsx +52 -0
  269. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +56 -0
  270. package/src/base/primitives/compound/CompoundDetailsButton.tsx +54 -0
  271. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +161 -0
  272. package/src/base/primitives/compound/CompoundNodeContainer.tsx +95 -0
  273. package/src/base/primitives/compound/CompoundTitle.css.ts +43 -0
  274. package/src/base/primitives/compound/CompoundTitle.tsx +29 -0
  275. package/src/base/primitives/customEdge.ts +32 -0
  276. package/src/base/primitives/customNode.ts +21 -0
  277. package/src/base/primitives/edge/EdgeActionButton.tsx +27 -0
  278. package/src/base/primitives/edge/EdgeContainer.tsx +48 -0
  279. package/src/base/primitives/edge/EdgeLabel.css.ts +196 -0
  280. package/src/base/primitives/edge/EdgeLabel.tsx +136 -0
  281. package/src/{xyflow → base/primitives/edge}/EdgeMarkers.tsx +29 -1
  282. package/src/base/primitives/edge/EdgePath.tsx +89 -0
  283. package/src/base/primitives/edge/edge.css.ts +122 -0
  284. package/src/base/primitives/element/ElementActionButtons.css.ts +48 -0
  285. package/src/base/primitives/element/ElementActionButtons.tsx +73 -0
  286. package/src/base/primitives/element/ElementDetailsButton.css.ts +54 -0
  287. package/src/base/primitives/element/ElementDetailsButton.tsx +59 -0
  288. package/src/base/primitives/element/ElementNodeContainer.css.ts +47 -0
  289. package/src/base/primitives/element/ElementNodeContainer.tsx +72 -0
  290. package/src/base/primitives/element/ElementShape.css.ts +134 -0
  291. package/src/{xyflow/nodes/element/ElementShapeSvg.tsx → base/primitives/element/ElementShape.tsx} +64 -19
  292. package/src/base/primitives/element/ElementTitle.css.ts +156 -0
  293. package/src/base/primitives/element/ElementTitle.tsx +76 -0
  294. package/src/base/primitives/index.ts +17 -0
  295. package/src/base/types.ts +169 -0
  296. package/src/base/updateEdges.ts +40 -0
  297. package/src/base/updateNodes.ts +46 -0
  298. package/src/base/xyflowMachine.ts +75 -0
  299. package/src/context/DiagramEventHandlers.tsx +53 -0
  300. package/src/context/DiagramFeatures.tsx +162 -0
  301. package/src/{ui → context}/FramerMotionConfig.tsx +2 -6
  302. package/src/context/IconRenderer.tsx +45 -0
  303. package/src/context/RootContainer.tsx +31 -0
  304. package/src/context/index.ts +14 -0
  305. package/src/globals.css.ts +32 -32
  306. package/src/hooks/index.ts +7 -5
  307. package/src/hooks/useCurrentViewId.ts +8 -0
  308. package/src/hooks/useDiagram.ts +129 -0
  309. package/src/hooks/useDiagramActor.ts +25 -0
  310. package/src/hooks/useDiagramContext.ts +11 -0
  311. package/src/hooks/useMantinePortalProps.ts +2 -2
  312. package/src/hooks/useXYFlow.ts +12 -38
  313. package/src/index.ts +3 -7
  314. package/src/likec4diagram/DiagramActor.tsx +79 -0
  315. package/src/likec4diagram/DiagramUI.tsx +28 -0
  316. package/src/likec4diagram/XYFlow.tsx +137 -0
  317. package/src/likec4diagram/custom/edges/NotePopover.css.ts +27 -0
  318. package/src/likec4diagram/custom/edges/NotePopover.tsx +96 -0
  319. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +355 -0
  320. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.ts +7 -7
  321. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.tsx +91 -70
  322. package/src/likec4diagram/custom/edges/edges.css.ts +39 -0
  323. package/src/likec4diagram/custom/edges/utils.ts +126 -0
  324. package/src/likec4diagram/custom/index.tsx +8 -0
  325. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +27 -0
  326. package/src/likec4diagram/custom/nodes/ElementActions.tsx +74 -0
  327. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +107 -0
  328. package/src/likec4diagram/custom/nodes/toolbar/ColorButton.tsx +175 -0
  329. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +122 -0
  330. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +140 -0
  331. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +77 -0
  332. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +143 -0
  333. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +9 -0
  334. package/src/likec4diagram/state/actorContext.ts +8 -0
  335. package/src/{state → likec4diagram/state}/aligners.ts +67 -40
  336. package/src/likec4diagram/state/assign.ts +384 -0
  337. package/src/likec4diagram/state/hotkeyActor.ts +20 -0
  338. package/src/likec4diagram/state/inspector.ts +23 -0
  339. package/src/likec4diagram/state/machine.ts +946 -0
  340. package/src/likec4diagram/state/syncManualLayoutActor.ts +219 -0
  341. package/src/likec4diagram/state/utils.ts +52 -0
  342. package/src/likec4diagram/types.ts +144 -0
  343. package/src/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.tsx +32 -28
  344. package/src/likec4diagram/ui/controls/Controls.tsx +107 -0
  345. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +46 -0
  346. package/src/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.tsx +16 -16
  347. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +83 -0
  348. package/src/{ui/top-left → likec4diagram/ui/controls}/_shared.ts +4 -3
  349. package/src/{ui/top-left → likec4diagram/ui/controls}/styles.css.ts +17 -17
  350. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.ts +11 -11
  351. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.tsx +6 -5
  352. package/src/likec4diagram/ui/diagram-title/Link.tsx +40 -0
  353. package/src/likec4diagram/ui/index.ts +2 -0
  354. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.css.ts +18 -18
  355. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.tsx +44 -44
  356. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.ts +16 -16
  357. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.tsx +29 -49
  358. package/src/{xyflow → likec4diagram}/useLayoutConstraints.ts +54 -43
  359. package/src/likec4diagram/useViewToNodesEdges.ts +297 -0
  360. package/src/likec4model/index.ts +0 -6
  361. package/src/likec4model/useLikeC4Model.ts +1 -43
  362. package/src/overlays/Overlays.tsx +201 -147
  363. package/src/overlays/element-details/ElementDetailsCard.css.ts +58 -58
  364. package/src/overlays/element-details/ElementDetailsCard.tsx +143 -128
  365. package/src/overlays/element-details/TabPanelDeployments.css.ts +14 -14
  366. package/src/overlays/element-details/TabPanelDeployments.tsx +22 -22
  367. package/src/overlays/element-details/TabPanelRelationships.css.ts +19 -19
  368. package/src/overlays/element-details/TabPanelRelationships.tsx +45 -28
  369. package/src/overlays/element-details/TabPanelStructure.css.ts +7 -7
  370. package/src/overlays/element-details/TabPanelStructure.tsx +11 -11
  371. package/src/overlays/overlay/Overlay.css.ts +73 -0
  372. package/src/overlays/overlay/Overlay.tsx +99 -0
  373. package/src/overlays/relationship-details/RelationshipDetails.tsx +234 -0
  374. package/src/overlays/{edge-details → relationship-details}/SelectEdge.css.ts +20 -13
  375. package/src/overlays/{edge-details → relationship-details}/SelectEdge.tsx +14 -14
  376. package/src/overlays/relationship-details/_types.ts +73 -0
  377. package/src/overlays/relationship-details/actor.ts +162 -0
  378. package/src/overlays/relationship-details/custom/ElementActions.tsx +45 -0
  379. package/src/overlays/relationship-details/custom/edgeTypes.tsx +49 -0
  380. package/src/overlays/relationship-details/custom/index.tsx +2 -0
  381. package/src/overlays/relationship-details/custom/nodeTypes.tsx +108 -0
  382. package/src/overlays/relationship-details/custom/styles.css.ts +13 -0
  383. package/src/overlays/relationship-details/hooks.ts +48 -0
  384. package/src/overlays/{edge-details/use-layouted-edge-details.ts → relationship-details/useLayoutedDetails.ts} +128 -114
  385. package/src/overlays/relationships-browser/-useRelationshipsView.ts +642 -0
  386. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +247 -0
  387. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.css.ts +12 -5
  388. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.tsx +19 -17
  389. package/src/overlays/relationships-browser/_types.ts +89 -0
  390. package/src/overlays/relationships-browser/actor.ts +224 -0
  391. package/src/overlays/relationships-browser/custom/ElementActions.tsx +44 -0
  392. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +18 -0
  393. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +49 -0
  394. package/src/overlays/relationships-browser/custom/index.tsx +2 -0
  395. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +109 -0
  396. package/src/overlays/relationships-browser/custom/styles.css.ts +13 -0
  397. package/src/overlays/relationships-browser/hooks.ts +48 -0
  398. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +209 -0
  399. package/src/utils/index.ts +15 -0
  400. package/src/{xyflow/utils.ts → utils/xyflow.ts} +22 -8
  401. package/dist/_virtual/_commonjsHelpers.js +0 -6
  402. package/dist/controls/Text.d.ts +0 -2
  403. package/dist/controls/Text.js +0 -7
  404. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +0 -1
  405. package/dist/controls/action-button-bar/ActionButtonBar.css.js +0 -5
  406. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +0 -9
  407. package/dist/controls/action-button-bar/ActionButtonBar.js +0 -100
  408. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +0 -10
  409. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +0 -9
  410. package/dist/controls/action-buttons/ActionButton.css.d.ts +0 -1
  411. package/dist/controls/action-buttons/ActionButton.css.js +0 -5
  412. package/dist/controls/action-buttons/ActionButton.d.ts +0 -9
  413. package/dist/controls/action-buttons/ActionButton.js +0 -66
  414. package/dist/controls/action-buttons/ActionButtons.d.ts +0 -12
  415. package/dist/controls/action-buttons/ActionButtons.js +0 -99
  416. package/dist/hooks/useDiagramState.d.ts +0 -6
  417. package/dist/hooks/useDiagramState.js +0 -27
  418. package/dist/overlays/OverlayContext.d.ts +0 -10
  419. package/dist/overlays/OverlayContext.js +0 -9
  420. package/dist/overlays/Overlays.css.d.ts +0 -3
  421. package/dist/overlays/Overlays.css.js +0 -7
  422. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +0 -5
  423. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +0 -185
  424. package/dist/overlays/edge-details/SelectEdge.css.js +0 -17
  425. package/dist/overlays/edge-details/_types.d.ts +0 -14
  426. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +0 -5
  427. package/dist/overlays/edge-details/xyflow/CompoundNode.js +0 -76
  428. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +0 -5
  429. package/dist/overlays/edge-details/xyflow/ElementNode.js +0 -159
  430. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +0 -3
  431. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +0 -84
  432. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +0 -9
  433. package/dist/overlays/edge-details/xyflow/styles.css.js +0 -21
  434. package/dist/overlays/index.d.ts +0 -1
  435. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +0 -5
  436. package/dist/overlays/relationships-of/RelationshipsOverlay.js +0 -193
  437. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +0 -19
  438. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +0 -290
  439. package/dist/overlays/relationships-of/SelectElement.css.js +0 -7
  440. package/dist/overlays/relationships-of/SelectElement.d.ts +0 -7
  441. package/dist/overlays/relationships-of/_types.d.ts +0 -28
  442. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +0 -22
  443. package/dist/overlays/relationships-of/use-layouted-relationships.js +0 -496
  444. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +0 -6
  445. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +0 -120
  446. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +0 -6
  447. package/dist/overlays/relationships-of/xyflow/ElementNode.js +0 -194
  448. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +0 -5
  449. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +0 -3
  450. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +0 -123
  451. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +0 -14
  452. package/dist/overlays/relationships-of/xyflow/styles.css.js +0 -24
  453. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +0 -4
  454. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +0 -12
  455. package/dist/overlays/shared/xyflow/_types.d.ts +0 -77
  456. package/dist/state/DiagramContext.d.ts +0 -1609
  457. package/dist/state/DiagramContext.js +0 -101
  458. package/dist/state/diagram-to-xyflow.d.ts +0 -11
  459. package/dist/state/diagram-to-xyflow.js +0 -113
  460. package/dist/state/diagramStore.d.ts +0 -1705
  461. package/dist/state/diagramStore.js +0 -808
  462. package/dist/state/diagramStore.layout.d.ts +0 -4
  463. package/dist/state/diagramStore.layout.js +0 -56
  464. package/dist/ui/DiagramTitlePanel.css.js +0 -11
  465. package/dist/ui/DiagramTitlePanel.d.ts +0 -1
  466. package/dist/ui/notation/NotationPanel.css.js +0 -16
  467. package/dist/ui/notation/NotationPanel.d.ts +0 -1
  468. package/dist/ui/top-left/TopLeftPanel.d.ts +0 -4
  469. package/dist/ui/top-left/TopLeftPanel.js +0 -211
  470. package/dist/ui/top-left/styles.css.js +0 -17
  471. package/dist/xyflow/FitviewOnDiagramChange.d.ts +0 -4
  472. package/dist/xyflow/FitviewOnDiagramChange.js +0 -72
  473. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +0 -1
  474. package/dist/xyflow/SelectEdgesOnNodeFocus.js +0 -96
  475. package/dist/xyflow/XYFlow.d.ts +0 -8
  476. package/dist/xyflow/XYFlow.js +0 -145
  477. package/dist/xyflow/XYFlowBackground.d.ts +0 -10
  478. package/dist/xyflow/XYFlowInner.d.ts +0 -8
  479. package/dist/xyflow/XYFlowInner.js +0 -41
  480. package/dist/xyflow/edges/EdgeLabel.d.ts +0 -7
  481. package/dist/xyflow/edges/EdgeLabel.js +0 -160
  482. package/dist/xyflow/edges/RelationshipEdge.d.ts +0 -6
  483. package/dist/xyflow/edges/RelationshipEdge.js +0 -443
  484. package/dist/xyflow/edges/edges.css.js +0 -37
  485. package/dist/xyflow/edges/utils.d.ts +0 -16
  486. package/dist/xyflow/edges/utils.js +0 -24
  487. package/dist/xyflow/nodes/AnimateVariants.d.ts +0 -1313
  488. package/dist/xyflow/nodes/AnimateVariants.js +0 -123
  489. package/dist/xyflow/nodes/Node.css.d.ts +0 -3
  490. package/dist/xyflow/nodes/Node.css.js +0 -9
  491. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -14
  492. package/dist/xyflow/nodes/compound/CompoundNode.css.js +0 -27
  493. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -6
  494. package/dist/xyflow/nodes/compound/CompoundNode.js +0 -216
  495. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  496. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -3
  497. package/dist/xyflow/nodes/element/ElementLink.d.ts +0 -6
  498. package/dist/xyflow/nodes/element/ElementNode.d.ts +0 -6
  499. package/dist/xyflow/nodes/element/ElementNode.js +0 -190
  500. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +0 -17
  501. package/dist/xyflow/nodes/element/element.css.d.ts +0 -18
  502. package/dist/xyflow/nodes/element/element.css.js +0 -31
  503. package/dist/xyflow/nodes/element/index.d.ts +0 -1
  504. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +0 -8
  505. package/dist/xyflow/nodes/shared/Toolbar.d.ts +0 -9
  506. package/dist/xyflow/nodes/shared/Toolbar.js +0 -436
  507. package/dist/xyflow/types.d.ts +0 -36
  508. package/dist/xyflow/useXYFlowEvents.d.ts +0 -160
  509. package/dist/xyflow/useXYFlowEvents.js +0 -275
  510. package/src/controls/Text.ts +0 -5
  511. package/src/controls/action-button-bar/ActionButtonBar.css.ts +0 -13
  512. package/src/controls/action-button-bar/ActionButtonBar.tsx +0 -138
  513. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +0 -13
  514. package/src/controls/action-buttons/ActionButton.css.ts +0 -29
  515. package/src/controls/action-buttons/ActionButton.tsx +0 -66
  516. package/src/controls/action-buttons/ActionButtons.tsx +0 -138
  517. package/src/hooks/useDiagramState.ts +0 -36
  518. package/src/overlays/OverlayContext.tsx +0 -11
  519. package/src/overlays/Overlays.css.ts +0 -136
  520. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +0 -255
  521. package/src/overlays/edge-details/_types.ts +0 -18
  522. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +0 -72
  523. package/src/overlays/edge-details/xyflow/ElementNode.tsx +0 -152
  524. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +0 -85
  525. package/src/overlays/edge-details/xyflow/styles.css.ts +0 -144
  526. package/src/overlays/index.tsx +0 -1
  527. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +0 -185
  528. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +0 -378
  529. package/src/overlays/relationships-of/_types.ts +0 -40
  530. package/src/overlays/relationships-of/use-layouted-relationships.ts +0 -699
  531. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +0 -124
  532. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +0 -194
  533. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +0 -19
  534. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +0 -127
  535. package/src/overlays/relationships-of/xyflow/styles.css.ts +0 -214
  536. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +0 -60
  537. package/src/overlays/shared/xyflow/_types.ts +0 -87
  538. package/src/state/DiagramContext.tsx +0 -107
  539. package/src/state/diagram-to-xyflow.ts +0 -150
  540. package/src/state/diagramStore.layout.ts +0 -66
  541. package/src/state/diagramStore.ts +0 -1099
  542. package/src/ui/top-left/TopLeftPanel.tsx +0 -220
  543. package/src/xyflow/FitviewOnDiagramChange.tsx +0 -83
  544. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +0 -106
  545. package/src/xyflow/XYFlow.tsx +0 -179
  546. package/src/xyflow/XYFlowInner.tsx +0 -48
  547. package/src/xyflow/edges/EdgeLabel.tsx +0 -193
  548. package/src/xyflow/edges/RelationshipEdge.tsx +0 -547
  549. package/src/xyflow/edges/edges.css.ts +0 -288
  550. package/src/xyflow/edges/utils.ts +0 -153
  551. package/src/xyflow/nodes/AnimateVariants.ts +0 -143
  552. package/src/xyflow/nodes/Node.css.ts +0 -44
  553. package/src/xyflow/nodes/compound/CompoundNode.css.ts +0 -258
  554. package/src/xyflow/nodes/compound/CompoundNode.tsx +0 -227
  555. package/src/xyflow/nodes/compound/index.ts +0 -1
  556. package/src/xyflow/nodes/element/ElementLink.css.ts +0 -67
  557. package/src/xyflow/nodes/element/ElementLink.tsx +0 -97
  558. package/src/xyflow/nodes/element/ElementNode.tsx +0 -209
  559. package/src/xyflow/nodes/element/element.css.ts +0 -369
  560. package/src/xyflow/nodes/element/index.ts +0 -1
  561. package/src/xyflow/nodes/shared/ElementIcon.tsx +0 -43
  562. package/src/xyflow/nodes/shared/Toolbar.tsx +0 -496
  563. package/src/xyflow/types.ts +0 -57
  564. package/src/xyflow/useXYFlowEvents.ts +0 -315
  565. /package/dist/{xyflow → base}/const.d.ts +0 -0
  566. /package/dist/{xyflow → base}/const.js +0 -0
  567. /package/dist/{ui → context}/EnsureMantine.d.ts +0 -0
  568. /package/dist/{ui → context}/EnsureMantine.js +0 -0
  569. /package/dist/{ui → context}/FramerMotionConfig.d.ts +0 -0
  570. /package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.d.ts +0 -0
  571. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.d.ts +0 -0
  572. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.d.ts +0 -0
  573. /package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.d.ts +0 -0
  574. /package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.d.ts +0 -0
  575. /package/dist/{ui → likec4diagram/ui/diagram-title}/Link.js +0 -0
  576. /package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.css.d.ts +0 -0
  577. /package/dist/{ui → likec4diagram/ui}/notation/index.d.ts +0 -0
  578. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.d.ts +0 -0
  579. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.d.ts +0 -0
  580. /package/src/{ui → context}/EnsureMantine.tsx +0 -0
  581. /package/src/{ui → likec4diagram/ui}/notation/index.ts +0 -0
@@ -0,0 +1,5 @@
1
+ import { NodeProps } from '../../../base/types';
2
+ import { RelationshipDetailsTypes as Types } from '../_types';
3
+ type ElementActionsProps = NodeProps<Types.ElementNodeData>;
4
+ export declare const ElementActions: (props: ElementActionsProps) => import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,33 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { IconZoomScan } from "@tabler/icons-react";
3
+ import { useEnabledFeature } from "../../../context/DiagramFeatures.js";
4
+ import { useDiagram } from "../../../hooks/useDiagram.js";
5
+ import { useRelationshipDetails } from "../hooks.js";
6
+ import { ElementActionButtons } from "../../../base/primitives/element/ElementActionButtons.js";
7
+ const ElementActions = (props) => {
8
+ const { enableNavigateTo } = useEnabledFeature("NavigateTo");
9
+ const diagram = useDiagram();
10
+ useRelationshipDetails();
11
+ const buttons = [];
12
+ const { navigateTo, fqn } = props.data;
13
+ if (navigateTo && enableNavigateTo) {
14
+ buttons.push({
15
+ key: "navigate",
16
+ icon: /* @__PURE__ */ jsx(IconZoomScan, {}),
17
+ onClick: (e) => {
18
+ e.stopPropagation();
19
+ diagram.navigateTo(navigateTo);
20
+ }
21
+ });
22
+ }
23
+ return /* @__PURE__ */ jsx(
24
+ ElementActionButtons,
25
+ {
26
+ buttons,
27
+ ...props
28
+ }
29
+ );
30
+ };
31
+ export {
32
+ ElementActions
33
+ };
@@ -0,0 +1,49 @@
1
+ import { NamedExoticComponent, CSSProperties, ReactNode } from 'react';
2
+ import { Position } from '@xyflow/system';
3
+ import { RelationId, Color, ViewId, RelationshipLineType } from '@likec4/core';
4
+ export declare const edgeTypes: {
5
+ relationship: NamedExoticComponent<{
6
+ source: string;
7
+ target: string;
8
+ style?: CSSProperties;
9
+ id: string;
10
+ selected?: boolean;
11
+ selectable?: boolean;
12
+ deletable?: boolean;
13
+ animated?: boolean;
14
+ sourceX: number;
15
+ sourceY: number;
16
+ targetX: number;
17
+ targetY: number;
18
+ sourcePosition: Position;
19
+ targetPosition: Position;
20
+ label?: ReactNode;
21
+ labelStyle?: CSSProperties;
22
+ labelShowBg?: boolean;
23
+ labelBgStyle?: CSSProperties;
24
+ labelBgPadding?: [number, number];
25
+ labelBgBorderRadius?: number;
26
+ sourceHandleId?: string | null;
27
+ targetHandleId?: string | null;
28
+ markerStart?: string;
29
+ markerEnd?: string;
30
+ pathOptions?: any;
31
+ interactionWidth?: number;
32
+ data: {
33
+ hovered?: boolean;
34
+ active?: boolean;
35
+ dimmed?: import("../../../base").Base.Dimmed;
36
+ } & {
37
+ relationId: RelationId;
38
+ color: Color | undefined;
39
+ label: string | null;
40
+ technology?: string | undefined | undefined;
41
+ description?: string | undefined | undefined;
42
+ navigateTo: ViewId | null;
43
+ line: RelationshipLineType;
44
+ hovered?: boolean;
45
+ active?: boolean;
46
+ dimmed?: import("../../../base").Base.Dimmed;
47
+ };
48
+ }>;
49
+ };
@@ -0,0 +1,51 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { getBezierPath } from "@xyflow/system";
3
+ import { useDiagram } from "../../../hooks/useDiagram.js";
4
+ import { customEdge } from "../../../base/primitives/customEdge.js";
5
+ import { useEnabledFeature } from "../../../context/DiagramFeatures.js";
6
+ import { EdgeContainer } from "../../../base/primitives/edge/EdgeContainer.js";
7
+ import { EdgePath } from "../../../base/primitives/edge/EdgePath.js";
8
+ import { EdgeLabel } from "../../../base/primitives/edge/EdgeLabel.js";
9
+ import { EdgeActionButton } from "../../../base/primitives/edge/EdgeActionButton.js";
10
+ const edgeTypes = {
11
+ relationship: customEdge((props) => {
12
+ const { enableNavigateTo } = useEnabledFeature("NavigateTo");
13
+ const {
14
+ sourceX,
15
+ targetY,
16
+ data: { navigateTo }
17
+ } = props;
18
+ const [svgPath, labelX, labelY] = getBezierPath(props);
19
+ const diagram = useDiagram();
20
+ return /* @__PURE__ */ jsxs(EdgeContainer, { ...props, children: [
21
+ /* @__PURE__ */ jsx(EdgePath, { ...props, svgPath }),
22
+ /* @__PURE__ */ jsx(
23
+ EdgeLabel,
24
+ {
25
+ edgeProps: props,
26
+ labelPosition: {
27
+ x: labelX,
28
+ y: labelY,
29
+ translate: "translate(-50%, 0)"
30
+ },
31
+ style: {
32
+ maxWidth: Math.abs(props.targetX - props.sourceX - 70)
33
+ },
34
+ children: enableNavigateTo && navigateTo && /* @__PURE__ */ jsx(
35
+ EdgeActionButton,
36
+ {
37
+ ...props,
38
+ onClick: (e) => {
39
+ e.stopPropagation();
40
+ diagram.navigateTo(navigateTo);
41
+ }
42
+ }
43
+ )
44
+ }
45
+ )
46
+ ] });
47
+ })
48
+ };
49
+ export {
50
+ edgeTypes
51
+ };
@@ -0,0 +1,2 @@
1
+ export { edgeTypes } from './edgeTypes';
2
+ export { nodeTypes } from './nodeTypes';
@@ -0,0 +1,39 @@
1
+ import { NodeProps } from '../../../base';
2
+ import { RelationshipDetailsTypes } from '../_types';
3
+ import { NamedExoticComponent } from 'react';
4
+ import { ElementStyle, Color, ViewId, Fqn } from '@likec4/core';
5
+ export declare const nodeTypes: {
6
+ element: NamedExoticComponent<NodeProps<{
7
+ style: ElementStyle;
8
+ title: string;
9
+ description: string | null;
10
+ width: number;
11
+ height: number;
12
+ technology: string | null;
13
+ shape: "rectangle" | "person" | "browser" | "mobile" | "cylinder" | "storage" | "queue";
14
+ color: Color;
15
+ navigateTo: ViewId<string> | null | undefined;
16
+ fqn: Fqn;
17
+ icon: string | null;
18
+ ports: RelationshipDetailsTypes.Ports;
19
+ hovered?: boolean;
20
+ dimmed?: import("../../../base").Base.Dimmed;
21
+ }>>;
22
+ compound: NamedExoticComponent<NodeProps<{
23
+ style: ElementStyle;
24
+ title: string;
25
+ shape: "rectangle" | "person" | "browser" | "mobile" | "cylinder" | "storage" | "queue";
26
+ color: Color;
27
+ fqn: Fqn;
28
+ depth: number;
29
+ icon: string | null;
30
+ ports: RelationshipDetailsTypes.Ports;
31
+ hovered?: boolean;
32
+ dimmed?: import("../../../base").Base.Dimmed;
33
+ }>>;
34
+ };
35
+ type ElementPortsProps = NodeProps<Pick<RelationshipDetailsTypes.ElementNodeData, 'ports' | 'height'>>;
36
+ export declare const ElementPorts: ({ data: { ports, height: h } }: ElementPortsProps) => import("react/jsx-runtime").JSX.Element;
37
+ type CompoundPortsProps = NodeProps<Pick<RelationshipDetailsTypes.CompoundNodeData, 'ports'>>;
38
+ export declare const CompoundPorts: ({ data }: CompoundPortsProps) => import("react/jsx-runtime").JSX.Element;
39
+ export {};
@@ -0,0 +1,89 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { ElementActions } from "./ElementActions.js";
3
+ import { Handle } from "@xyflow/react";
4
+ import { Position } from "@xyflow/system";
5
+ import { customNode } from "../../../base/primitives/customNode.js";
6
+ import { ElementNodeContainer } from "../../../base/primitives/element/ElementNodeContainer.js";
7
+ import { ElementShape } from "../../../base/primitives/element/ElementShape.js";
8
+ import { ElementTitle } from "../../../base/primitives/element/ElementTitle.js";
9
+ import { CompoundNodeContainer } from "../../../base/primitives/compound/CompoundNodeContainer.js";
10
+ import { CompoundTitle } from "../../../base/primitives/compound/CompoundTitle.js";
11
+ const nodeTypes = {
12
+ element: customNode((props) => {
13
+ return /* @__PURE__ */ jsxs(ElementNodeContainer, { nodeProps: props, children: [
14
+ /* @__PURE__ */ jsx(ElementShape, { ...props }),
15
+ /* @__PURE__ */ jsx(ElementTitle, { ...props, iconSize: 40 }),
16
+ /* @__PURE__ */ jsx(ElementActions, { ...props }),
17
+ /* @__PURE__ */ jsx(ElementPorts, { ...props })
18
+ ] });
19
+ }),
20
+ compound: customNode((props) => {
21
+ return /* @__PURE__ */ jsxs(CompoundNodeContainer, { nodeProps: props, children: [
22
+ /* @__PURE__ */ jsx(CompoundTitle, { ...props }),
23
+ /* @__PURE__ */ jsx(CompoundPorts, { ...props })
24
+ ] });
25
+ })
26
+ };
27
+ const ElementPorts = ({ data: { ports, height: h } }) => {
28
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
29
+ ports.in.map((id, i) => /* @__PURE__ */ jsx(
30
+ Handle,
31
+ {
32
+ id,
33
+ type: "target",
34
+ position: Position.Left,
35
+ style: {
36
+ visibility: "hidden",
37
+ top: `${15 + (i + 1) * ((h - 30) / (ports.in.length + 1))}px`
38
+ }
39
+ },
40
+ id
41
+ )),
42
+ ports.out.map((id, i) => /* @__PURE__ */ jsx(
43
+ Handle,
44
+ {
45
+ id,
46
+ type: "source",
47
+ position: Position.Right,
48
+ style: {
49
+ visibility: "hidden",
50
+ top: `${15 + (i + 1) * ((h - 30) / (ports.out.length + 1))}px`
51
+ }
52
+ },
53
+ id
54
+ ))
55
+ ] });
56
+ };
57
+ const CompoundPorts = ({ data }) => /* @__PURE__ */ jsxs(Fragment, { children: [
58
+ data.ports.in.map((id, i) => /* @__PURE__ */ jsx(
59
+ Handle,
60
+ {
61
+ id,
62
+ type: "target",
63
+ position: Position.Left,
64
+ style: {
65
+ visibility: "hidden",
66
+ top: `${20 * (i + 1)}px`
67
+ }
68
+ },
69
+ id
70
+ )),
71
+ data.ports.out.map((id, i) => /* @__PURE__ */ jsx(
72
+ Handle,
73
+ {
74
+ id,
75
+ type: "source",
76
+ position: Position.Right,
77
+ style: {
78
+ visibility: "hidden",
79
+ top: `${20 * (i + 1)}px`
80
+ }
81
+ },
82
+ id
83
+ ))
84
+ ] });
85
+ export {
86
+ CompoundPorts,
87
+ ElementPorts,
88
+ nodeTypes
89
+ };
@@ -0,0 +1 @@
1
+ export declare const emptyNode: string;
@@ -0,0 +1,59 @@
1
+ import { EdgeId, RelationId, Color, ViewId, RelationshipLineType } from '@likec4/core';
2
+ import { RelationshipDetailsActorRef, RelationshipDetailsSnapshot, Input, Events } from './actor';
3
+ import { Context, ReactNode, CSSProperties } from 'react';
4
+ import { GeneralHelpers, ViewportHelperFunctions } from '@xyflow/react';
5
+ import { EdgeMarkerType, HandleType } from '@xyflow/system';
6
+ export declare const RelationshipDetailsActorContext: Context<RelationshipDetailsActorRef | null>;
7
+ export declare function useRelationshipsBrowserActor(): RelationshipDetailsActorRef;
8
+ export declare function useRelationshipsBrowserState<T>(selector: (state: RelationshipDetailsSnapshot) => T, compare?: (a: T, b: T) => boolean): T;
9
+ export declare function useRelationshipDetails(): {
10
+ getState: () => Readonly< Input & {
11
+ xyflow: ( GeneralHelpers<import("./_types").RelationshipDetailsTypes.Node, {
12
+ id: string;
13
+ source: string;
14
+ target: string;
15
+ sourceHandle?: string | null;
16
+ targetHandle?: string | null;
17
+ animated?: boolean;
18
+ hidden?: boolean;
19
+ deletable?: boolean;
20
+ selectable?: boolean;
21
+ selected?: boolean;
22
+ markerStart?: EdgeMarkerType;
23
+ markerEnd?: EdgeMarkerType;
24
+ zIndex?: number;
25
+ ariaLabel?: string;
26
+ interactionWidth?: number;
27
+ label?: ReactNode;
28
+ labelStyle?: CSSProperties;
29
+ labelShowBg?: boolean;
30
+ labelBgStyle?: CSSProperties;
31
+ labelBgPadding?: [number, number];
32
+ labelBgBorderRadius?: number;
33
+ style?: CSSProperties;
34
+ className?: string;
35
+ reconnectable?: boolean | HandleType;
36
+ focusable?: boolean;
37
+ type: "relationship";
38
+ data: {
39
+ relationId: RelationId;
40
+ color: Color | undefined;
41
+ label: string | null;
42
+ technology?: string | undefined | undefined;
43
+ description?: string | undefined | undefined;
44
+ navigateTo: ViewId | null;
45
+ line: RelationshipLineType;
46
+ hovered?: boolean;
47
+ active?: boolean;
48
+ dimmed?: import("../../base").Base.Dimmed;
49
+ };
50
+ }> & Omit< ViewportHelperFunctions, "initialized"> & {
51
+ viewportInitialized: boolean;
52
+ }) | null;
53
+ initialized: boolean;
54
+ }>;
55
+ send: (event: Events) => void;
56
+ navigateTo: (edgeId: EdgeId) => void;
57
+ fitDiagram: () => void;
58
+ close: () => void;
59
+ };
@@ -0,0 +1,46 @@
1
+ import { nonNullable } from "@likec4/core";
2
+ import { useCallbackRef } from "@mantine/hooks";
3
+ import { useSelector } from "@xstate/react";
4
+ import { shallowEqual } from "fast-equals";
5
+ import { createContext, useTransition, useMemo, useContext } from "react";
6
+ const RelationshipDetailsActorContext = createContext(null);
7
+ function useRelationshipsBrowserActor() {
8
+ return nonNullable(useContext(RelationshipDetailsActorContext), "No RelationshipsBrowserActorContext");
9
+ }
10
+ function useRelationshipsBrowserState(selector, compare = shallowEqual) {
11
+ const select = useCallbackRef(selector);
12
+ const actor = useRelationshipsBrowserActor();
13
+ return useSelector(actor, select, compare);
14
+ }
15
+ function useRelationshipDetails() {
16
+ const actor = useRelationshipsBrowserActor();
17
+ const [, startTransition] = useTransition();
18
+ return useMemo(() => ({
19
+ getState: () => actor.getSnapshot().context,
20
+ send: actor.send,
21
+ navigateTo: (edgeId) => {
22
+ startTransition(() => {
23
+ actor.send({
24
+ type: "navigate.to",
25
+ edgeId
26
+ });
27
+ });
28
+ },
29
+ fitDiagram: () => {
30
+ startTransition(() => {
31
+ actor.send({ type: "fitDiagram" });
32
+ });
33
+ },
34
+ close: () => {
35
+ startTransition(() => {
36
+ actor.send({ type: "close" });
37
+ });
38
+ }
39
+ }), [actor]);
40
+ }
41
+ export {
42
+ RelationshipDetailsActorContext,
43
+ useRelationshipDetails,
44
+ useRelationshipsBrowserActor,
45
+ useRelationshipsBrowserState
46
+ };
@@ -1,17 +1,15 @@
1
1
  import { DiagramEdge, DiagramView, EdgeId } from '@likec4/core';
2
- import { SharedFlowTypes } from '../shared/xyflow/_types';
3
- import { EdgeDetailsFlowTypes } from './_types';
2
+ import { RelationshipDetailsTypes } from './_types';
4
3
  export declare const ZIndexes: {
5
4
  compound: number;
6
5
  edge: number;
7
6
  element: number;
8
7
  max: number;
9
8
  };
10
- export declare function useLayoutedEdgeDetails(edgeId: EdgeId): {
11
- view: DiagramView;
9
+ export declare function useLayoutedDetails(edgeId: EdgeId, view: DiagramView): {
12
10
  edge: DiagramEdge;
13
- nodes: SharedFlowTypes.Node[];
14
- edges: EdgeDetailsFlowTypes.Edge[];
11
+ xynodes: RelationshipDetailsTypes.Node[];
12
+ xyedges: RelationshipDetailsTypes.Edge[];
15
13
  bounds: {
16
14
  x: number;
17
15
  y: number;
@@ -1,21 +1,21 @@
1
1
  import dagre from "@dagrejs/dagre";
2
2
  import { invariant, compareRelations, compareFqnHierarchically, isAncestor } from "@likec4/core";
3
- import { MarkerType } from "@xyflow/system";
4
3
  import { useMemo } from "react";
5
4
  import { pipe, sort, reverse, forEach, takeWhile, first, map, sortBy, prop, filter, isTruthy } from "remeda";
6
- import { useDiagramState } from "../../hooks/useDiagramState.js";
7
5
  import { useLikeC4Model } from "../../likec4model/useLikeC4Model.js";
8
6
  const Sizes = {
9
7
  dagre: {
10
- ranksep: 40,
11
- nodesep: 25,
12
- edgesep: 15
8
+ ranksep: 60,
9
+ nodesep: 35,
10
+ edgesep: 25
13
11
  },
14
12
  edgeLabel: {
15
- width: 120
13
+ width: 120,
14
+ height: 10,
15
+ minlen: 1
16
16
  },
17
- nodeWidth: 270,
18
- hodeHeight: 160,
17
+ nodeWidth: 330,
18
+ hodeHeight: 180,
19
19
  // Spacer between elements in a compound node
20
20
  // 0 means no spacer
21
21
  spacerHeight: 0,
@@ -46,9 +46,7 @@ const sized = (height = Sizes.hodeHeight) => ({
46
46
  });
47
47
  const graphId = (node) => ({
48
48
  id: node.id,
49
- port: node.type === "compound" ? `${node.id}::port` : node.id,
50
- body: `${node.id}`,
51
- spacer: `${node.id}:spacer`
49
+ port: node.type === "compound" ? `${node.id}::port` : node.id
52
50
  });
53
51
  function nodeData(element, ctx) {
54
52
  var _a;
@@ -61,42 +59,52 @@ function nodeData(element, ctx) {
61
59
  );
62
60
  return {
63
61
  fqn: element.id,
64
- element: {
65
- kind: element.kind,
66
- title: (diagramNode == null ? void 0 : diagramNode.title) ?? element.title,
67
- description: (diagramNode == null ? void 0 : diagramNode.description) ?? element.description,
68
- color: (diagramNode == null ? void 0 : diagramNode.color) ?? (ancestor == null ? void 0 : ancestor.color) ?? element.color,
69
- shape: (diagramNode == null ? void 0 : diagramNode.shape) ?? element.shape
70
- },
62
+ title: (diagramNode == null ? void 0 : diagramNode.title) ?? element.title,
63
+ technology: (diagramNode == null ? void 0 : diagramNode.technology) ?? element.technology,
64
+ description: (diagramNode == null ? void 0 : diagramNode.description) ?? element.description,
65
+ color: (diagramNode == null ? void 0 : diagramNode.color) ?? (ancestor == null ? void 0 : ancestor.color) ?? element.color,
66
+ shape: (diagramNode == null ? void 0 : diagramNode.shape) ?? element.shape,
67
+ icon: (diagramNode == null ? void 0 : diagramNode.icon) ?? element.icon,
68
+ style: (diagramNode == null ? void 0 : diagramNode.style) ?? element.$element.style ?? {},
71
69
  navigateTo: (diagramNode == null ? void 0 : diagramNode.navigateTo) ?? ((_a = first(element.scopedViews().take(1).toArray())) == null ? void 0 : _a.id) ?? null,
70
+ width: 0,
71
+ height: 0,
72
+ depth: 1,
72
73
  ports: {
73
74
  in: [],
74
75
  out: []
75
76
  }
76
77
  };
77
78
  }
78
- function createNode(nodeType, element, ctx) {
79
+ function createXYNode(nodeType, element, ctx) {
79
80
  let node = ctx.xynodes.get(element.id);
80
81
  if (node) {
81
82
  return node;
82
83
  }
83
84
  const g = ctx.g;
84
85
  const parent = pipe(
85
- element.ancestors().toArray(),
86
+ [...element.ancestors()],
86
87
  takeWhile((ancestor) => !isAncestor(ancestor.id, ctx.edge.source) && !isAncestor(ancestor.id, ctx.edge.target)),
87
88
  first(),
88
- (found) => found ? createNode("compound", found, ctx) : null
89
+ (found) => found ? createXYNode("compound", found, ctx) : null
89
90
  );
90
- const xynode = {
91
- type: nodeType,
91
+ const base = {
92
92
  id: element.id,
93
+ draggable: false,
94
+ selectable: true,
95
+ focusable: true,
96
+ deletable: false,
93
97
  position: { x: 0, y: 0 },
94
- data: {
95
- ...nodeData(element, ctx)
96
- },
97
98
  zIndex: ZIndexes[nodeType],
99
+ initialWidth: 0,
100
+ initialHeight: 0,
98
101
  ...!!parent && { parentId: parent.id }
99
102
  };
103
+ const xynode = {
104
+ ...base,
105
+ type: nodeType,
106
+ data: nodeData(element, ctx)
107
+ };
100
108
  ctx.xynodes.set(element.id, xynode);
101
109
  const k = graphId(xynode);
102
110
  g.setNode(k.id, sized());
@@ -108,7 +116,7 @@ function createNode(nodeType, element, ctx) {
108
116
  g.setParent(k.port, k.id);
109
117
  }
110
118
  if (parent) {
111
- const parentGraphId = graphId(parent).body;
119
+ const parentGraphId = graphId(parent).id;
112
120
  g.setParent(k.id, parentGraphId);
113
121
  }
114
122
  return xynode;
@@ -139,9 +147,7 @@ function applyDagreLayout(g) {
139
147
  };
140
148
  };
141
149
  }
142
- function layout(edgeId, view, likec4model) {
143
- const edge = view.edges.find((e) => e.id === edgeId);
144
- invariant(edge, "edge not found");
150
+ function layout(edge, view, likec4model) {
145
151
  const all = /* @__PURE__ */ new Set([edge.source, edge.target]);
146
152
  const relations = edge.relations.map((r) => {
147
153
  const relation = likec4model.relationship(r);
@@ -160,7 +166,7 @@ function layout(edgeId, view, likec4model) {
160
166
  xynodes: /* @__PURE__ */ new Map(),
161
167
  edge,
162
168
  diagramNodes,
163
- edges: []
169
+ xyedges: []
164
170
  };
165
171
  pipe(
166
172
  [...all],
@@ -168,7 +174,7 @@ function layout(edgeId, view, likec4model) {
168
174
  reverse(),
169
175
  forEach((id) => {
170
176
  const element = likec4model.element(id);
171
- createNode("element", element, ctx);
177
+ createXYNode("element", element, ctx);
172
178
  })
173
179
  );
174
180
  if (relations.length === 1 && all.size < 4) {
@@ -184,29 +190,23 @@ function layout(edgeId, view, likec4model) {
184
190
  g.setEdge(graphId(source).port, graphId(target).port);
185
191
  const edge2 = {
186
192
  id: relation.id,
187
- type: "relation",
193
+ type: "relationship",
188
194
  source: source.id,
189
195
  target: target.id,
190
196
  sourceHandle: target.id,
191
197
  targetHandle: source.id,
192
198
  data: {
193
- relations: [relation],
199
+ relationId: relation.id,
200
+ color: relation.color,
201
+ label: relation.title ?? null,
202
+ technology: relation.technology,
203
+ description: relation.description,
194
204
  navigateTo: relation.navigateTo ?? null,
195
- technology: relation.technology ?? null,
196
- description: relation.description ?? null
205
+ line: relation.line ?? "dashed"
197
206
  },
198
- label: relation.title,
199
- zIndex: ZIndexes.edge,
200
- markerEnd: {
201
- type: MarkerType.ArrowClosed,
202
- width: 10
203
- },
204
- style: {
205
- strokeWidth: 2.2,
206
- strokeDasharray: "5, 5"
207
- }
207
+ zIndex: ZIndexes.edge
208
208
  };
209
- ctx.edges.push(edge2);
209
+ ctx.xyedges.push(edge2);
210
210
  }
211
211
  const nodebounds = applyDagreLayout(ctx.g);
212
212
  const sortedPorts = (ports) => {
@@ -226,22 +226,26 @@ function layout(edgeId, view, likec4model) {
226
226
  );
227
227
  };
228
228
  const xynodes = [...ctx.xynodes.values()].map((node) => {
229
- if (node.data.ports.in.length > 1) {
230
- node.data.ports.in = sortedPorts(node.data.ports.in);
231
- }
232
- if (node.data.ports.out.length > 1) {
233
- node.data.ports.out = sortedPorts(node.data.ports.out);
229
+ const { position, width, height } = nodebounds(node.id, node.parentId);
230
+ node.data.ports.in = sortedPorts(node.data.ports.in);
231
+ node.data.ports.out = sortedPorts(node.data.ports.out);
232
+ if (node.type === "element") {
233
+ node.data.width = width;
234
+ node.data.height = height;
234
235
  }
235
- return {
236
- ...node,
237
- ...nodebounds(node.id, node.parentId)
236
+ node.position = position;
237
+ node.initialHeight = height;
238
+ node.initialWidth = width;
239
+ node.style = {
240
+ width,
241
+ height
238
242
  };
243
+ return node;
239
244
  });
240
245
  return {
241
- view,
242
246
  edge,
243
- edges: ctx.edges,
244
- nodes: xynodes,
247
+ xyedges: ctx.xyedges,
248
+ xynodes,
245
249
  bounds: {
246
250
  x: 0,
247
251
  y: 0,
@@ -250,21 +254,21 @@ function layout(edgeId, view, likec4model) {
250
254
  }
251
255
  };
252
256
  }
253
- function useLayoutedEdgeDetails(edgeId) {
254
- const view = useDiagramState((s) => s.view);
257
+ function useLayoutedDetails(edgeId, view) {
258
+ const edge = view.edges.find((e) => e.id === edgeId);
259
+ invariant(edge, `edge ${edgeId} not found in ${view.id}`);
255
260
  const likec4model = useLikeC4Model(true);
256
261
  return useMemo(() => layout(
257
- edgeId,
262
+ edge,
258
263
  view,
259
264
  likec4model
260
265
  ), [
261
- edgeId,
266
+ edge,
262
267
  view,
263
- likec4model,
264
268
  layout
265
269
  ]);
266
270
  }
267
271
  export {
268
272
  ZIndexes,
269
- useLayoutedEdgeDetails
273
+ useLayoutedDetails
270
274
  };