@likec4/diagram 1.19.1 → 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 (582) 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 -87
  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/theme-vars.css.js +1 -0
  250. package/dist/utils/index.d.ts +4 -0
  251. package/dist/{xyflow/utils.d.ts → utils/xyflow.d.ts} +4 -4
  252. package/dist/{xyflow/utils.js → utils/xyflow.js} +14 -20
  253. package/package.json +24 -21
  254. package/src/LikeC4Diagram.css.ts +21 -15
  255. package/src/LikeC4Diagram.props.ts +14 -21
  256. package/src/LikeC4Diagram.tsx +105 -150
  257. package/src/LikeC4Search.tsx +21 -28
  258. package/src/StaticLikeC4Diagram.tsx +0 -1
  259. package/src/{xyflow/XYFlowBackground.tsx → base/Background.tsx} +8 -8
  260. package/src/base/BaseXYFlow.tsx +200 -0
  261. package/src/{xyflow → base}/const.ts +1 -1
  262. package/src/base/example/RelationshipsBrowser.tsx +62 -0
  263. package/src/base/example/_types.ts +71 -0
  264. package/src/base/example/custom.tsx +58 -0
  265. package/src/base/example/useViewToNodesEdges.ts +193 -0
  266. package/src/base/index.ts +10 -0
  267. package/src/base/primitives/NodeHandles.tsx +18 -0
  268. package/src/base/primitives/compound/CompoundActionButton.css.ts +55 -0
  269. package/src/base/primitives/compound/CompoundActionButton.tsx +52 -0
  270. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +56 -0
  271. package/src/base/primitives/compound/CompoundDetailsButton.tsx +54 -0
  272. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +161 -0
  273. package/src/base/primitives/compound/CompoundNodeContainer.tsx +95 -0
  274. package/src/base/primitives/compound/CompoundTitle.css.ts +43 -0
  275. package/src/base/primitives/compound/CompoundTitle.tsx +29 -0
  276. package/src/base/primitives/customEdge.ts +32 -0
  277. package/src/base/primitives/customNode.ts +21 -0
  278. package/src/base/primitives/edge/EdgeActionButton.tsx +27 -0
  279. package/src/base/primitives/edge/EdgeContainer.tsx +48 -0
  280. package/src/base/primitives/edge/EdgeLabel.css.ts +196 -0
  281. package/src/base/primitives/edge/EdgeLabel.tsx +136 -0
  282. package/src/{xyflow → base/primitives/edge}/EdgeMarkers.tsx +29 -1
  283. package/src/base/primitives/edge/EdgePath.tsx +89 -0
  284. package/src/base/primitives/edge/edge.css.ts +122 -0
  285. package/src/base/primitives/element/ElementActionButtons.css.ts +48 -0
  286. package/src/base/primitives/element/ElementActionButtons.tsx +73 -0
  287. package/src/base/primitives/element/ElementDetailsButton.css.ts +54 -0
  288. package/src/base/primitives/element/ElementDetailsButton.tsx +59 -0
  289. package/src/base/primitives/element/ElementNodeContainer.css.ts +47 -0
  290. package/src/base/primitives/element/ElementNodeContainer.tsx +72 -0
  291. package/src/base/primitives/element/ElementShape.css.ts +134 -0
  292. package/src/{xyflow/nodes/element/ElementShapeSvg.tsx → base/primitives/element/ElementShape.tsx} +64 -19
  293. package/src/base/primitives/element/ElementTitle.css.ts +156 -0
  294. package/src/base/primitives/element/ElementTitle.tsx +76 -0
  295. package/src/base/primitives/index.ts +17 -0
  296. package/src/base/types.ts +169 -0
  297. package/src/base/updateEdges.ts +40 -0
  298. package/src/base/updateNodes.ts +46 -0
  299. package/src/base/xyflowMachine.ts +75 -0
  300. package/src/context/DiagramEventHandlers.tsx +53 -0
  301. package/src/context/DiagramFeatures.tsx +162 -0
  302. package/src/{ui → context}/FramerMotionConfig.tsx +2 -6
  303. package/src/context/IconRenderer.tsx +45 -0
  304. package/src/context/RootContainer.tsx +31 -0
  305. package/src/context/index.ts +14 -0
  306. package/src/globals.css.ts +32 -32
  307. package/src/hooks/index.ts +7 -5
  308. package/src/hooks/useCurrentViewId.ts +8 -0
  309. package/src/hooks/useDiagram.ts +129 -0
  310. package/src/hooks/useDiagramActor.ts +25 -0
  311. package/src/hooks/useDiagramContext.ts +11 -0
  312. package/src/hooks/useMantinePortalProps.ts +2 -2
  313. package/src/hooks/useXYFlow.ts +12 -38
  314. package/src/index.ts +3 -7
  315. package/src/likec4diagram/DiagramActor.tsx +79 -0
  316. package/src/likec4diagram/DiagramUI.tsx +28 -0
  317. package/src/likec4diagram/XYFlow.tsx +137 -0
  318. package/src/likec4diagram/custom/edges/NotePopover.css.ts +27 -0
  319. package/src/likec4diagram/custom/edges/NotePopover.tsx +96 -0
  320. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +355 -0
  321. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.ts +7 -7
  322. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.tsx +91 -70
  323. package/src/likec4diagram/custom/edges/edges.css.ts +39 -0
  324. package/src/likec4diagram/custom/edges/utils.ts +126 -0
  325. package/src/likec4diagram/custom/index.tsx +8 -0
  326. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +27 -0
  327. package/src/likec4diagram/custom/nodes/ElementActions.tsx +74 -0
  328. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +107 -0
  329. package/src/likec4diagram/custom/nodes/toolbar/ColorButton.tsx +175 -0
  330. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +122 -0
  331. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +140 -0
  332. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +77 -0
  333. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +143 -0
  334. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +9 -0
  335. package/src/likec4diagram/state/actorContext.ts +8 -0
  336. package/src/{state → likec4diagram/state}/aligners.ts +67 -40
  337. package/src/likec4diagram/state/assign.ts +384 -0
  338. package/src/likec4diagram/state/hotkeyActor.ts +20 -0
  339. package/src/likec4diagram/state/inspector.ts +23 -0
  340. package/src/likec4diagram/state/machine.ts +946 -0
  341. package/src/likec4diagram/state/syncManualLayoutActor.ts +219 -0
  342. package/src/likec4diagram/state/utils.ts +52 -0
  343. package/src/likec4diagram/types.ts +144 -0
  344. package/src/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.tsx +32 -28
  345. package/src/likec4diagram/ui/controls/Controls.tsx +107 -0
  346. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +46 -0
  347. package/src/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.tsx +16 -16
  348. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +83 -0
  349. package/src/{ui/top-left → likec4diagram/ui/controls}/_shared.ts +4 -3
  350. package/src/{ui/top-left → likec4diagram/ui/controls}/styles.css.ts +17 -17
  351. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.ts +11 -11
  352. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.tsx +6 -5
  353. package/src/likec4diagram/ui/diagram-title/Link.tsx +40 -0
  354. package/src/likec4diagram/ui/index.ts +2 -0
  355. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.css.ts +18 -18
  356. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.tsx +44 -44
  357. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.ts +16 -16
  358. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.tsx +29 -49
  359. package/src/{xyflow → likec4diagram}/useLayoutConstraints.ts +54 -43
  360. package/src/likec4diagram/useViewToNodesEdges.ts +297 -0
  361. package/src/likec4model/index.ts +0 -6
  362. package/src/likec4model/useLikeC4Model.ts +1 -43
  363. package/src/overlays/Overlays.tsx +201 -147
  364. package/src/overlays/element-details/ElementDetailsCard.css.ts +58 -58
  365. package/src/overlays/element-details/ElementDetailsCard.tsx +143 -128
  366. package/src/overlays/element-details/TabPanelDeployments.css.ts +14 -14
  367. package/src/overlays/element-details/TabPanelDeployments.tsx +22 -22
  368. package/src/overlays/element-details/TabPanelRelationships.css.ts +19 -19
  369. package/src/overlays/element-details/TabPanelRelationships.tsx +45 -28
  370. package/src/overlays/element-details/TabPanelStructure.css.ts +7 -7
  371. package/src/overlays/element-details/TabPanelStructure.tsx +11 -11
  372. package/src/overlays/overlay/Overlay.css.ts +73 -0
  373. package/src/overlays/overlay/Overlay.tsx +99 -0
  374. package/src/overlays/relationship-details/RelationshipDetails.tsx +234 -0
  375. package/src/overlays/{edge-details → relationship-details}/SelectEdge.css.ts +20 -13
  376. package/src/overlays/{edge-details → relationship-details}/SelectEdge.tsx +14 -14
  377. package/src/overlays/relationship-details/_types.ts +73 -0
  378. package/src/overlays/relationship-details/actor.ts +162 -0
  379. package/src/overlays/relationship-details/custom/ElementActions.tsx +45 -0
  380. package/src/overlays/relationship-details/custom/edgeTypes.tsx +49 -0
  381. package/src/overlays/relationship-details/custom/index.tsx +2 -0
  382. package/src/overlays/relationship-details/custom/nodeTypes.tsx +108 -0
  383. package/src/overlays/relationship-details/custom/styles.css.ts +13 -0
  384. package/src/overlays/relationship-details/hooks.ts +48 -0
  385. package/src/overlays/{edge-details/use-layouted-edge-details.ts → relationship-details/useLayoutedDetails.ts} +128 -114
  386. package/src/overlays/relationships-browser/-useRelationshipsView.ts +642 -0
  387. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +247 -0
  388. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.css.ts +12 -5
  389. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.tsx +19 -17
  390. package/src/overlays/relationships-browser/_types.ts +89 -0
  391. package/src/overlays/relationships-browser/actor.ts +224 -0
  392. package/src/overlays/relationships-browser/custom/ElementActions.tsx +44 -0
  393. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +18 -0
  394. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +49 -0
  395. package/src/overlays/relationships-browser/custom/index.tsx +2 -0
  396. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +109 -0
  397. package/src/overlays/relationships-browser/custom/styles.css.ts +13 -0
  398. package/src/overlays/relationships-browser/hooks.ts +48 -0
  399. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +209 -0
  400. package/src/utils/index.ts +15 -0
  401. package/src/{xyflow/utils.ts → utils/xyflow.ts} +22 -8
  402. package/dist/_virtual/_commonjsHelpers.js +0 -6
  403. package/dist/controls/Text.d.ts +0 -2
  404. package/dist/controls/Text.js +0 -7
  405. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +0 -1
  406. package/dist/controls/action-button-bar/ActionButtonBar.css.js +0 -5
  407. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +0 -9
  408. package/dist/controls/action-button-bar/ActionButtonBar.js +0 -100
  409. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +0 -10
  410. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +0 -9
  411. package/dist/controls/action-buttons/ActionButton.css.d.ts +0 -1
  412. package/dist/controls/action-buttons/ActionButton.css.js +0 -5
  413. package/dist/controls/action-buttons/ActionButton.d.ts +0 -9
  414. package/dist/controls/action-buttons/ActionButton.js +0 -66
  415. package/dist/controls/action-buttons/ActionButtons.d.ts +0 -12
  416. package/dist/controls/action-buttons/ActionButtons.js +0 -99
  417. package/dist/hooks/useDiagramState.d.ts +0 -6
  418. package/dist/hooks/useDiagramState.js +0 -27
  419. package/dist/overlays/OverlayContext.d.ts +0 -10
  420. package/dist/overlays/OverlayContext.js +0 -9
  421. package/dist/overlays/Overlays.css.d.ts +0 -3
  422. package/dist/overlays/Overlays.css.js +0 -7
  423. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +0 -5
  424. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +0 -185
  425. package/dist/overlays/edge-details/SelectEdge.css.js +0 -17
  426. package/dist/overlays/edge-details/_types.d.ts +0 -14
  427. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +0 -5
  428. package/dist/overlays/edge-details/xyflow/CompoundNode.js +0 -76
  429. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +0 -5
  430. package/dist/overlays/edge-details/xyflow/ElementNode.js +0 -159
  431. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +0 -3
  432. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +0 -84
  433. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +0 -9
  434. package/dist/overlays/edge-details/xyflow/styles.css.js +0 -21
  435. package/dist/overlays/index.d.ts +0 -1
  436. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +0 -5
  437. package/dist/overlays/relationships-of/RelationshipsOverlay.js +0 -193
  438. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +0 -19
  439. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +0 -290
  440. package/dist/overlays/relationships-of/SelectElement.css.js +0 -7
  441. package/dist/overlays/relationships-of/SelectElement.d.ts +0 -7
  442. package/dist/overlays/relationships-of/_types.d.ts +0 -28
  443. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +0 -22
  444. package/dist/overlays/relationships-of/use-layouted-relationships.js +0 -496
  445. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +0 -6
  446. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +0 -120
  447. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +0 -6
  448. package/dist/overlays/relationships-of/xyflow/ElementNode.js +0 -194
  449. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +0 -5
  450. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +0 -3
  451. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +0 -123
  452. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +0 -14
  453. package/dist/overlays/relationships-of/xyflow/styles.css.js +0 -24
  454. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +0 -4
  455. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +0 -12
  456. package/dist/overlays/shared/xyflow/_types.d.ts +0 -77
  457. package/dist/state/DiagramContext.d.ts +0 -1609
  458. package/dist/state/DiagramContext.js +0 -101
  459. package/dist/state/diagram-to-xyflow.d.ts +0 -11
  460. package/dist/state/diagram-to-xyflow.js +0 -113
  461. package/dist/state/diagramStore.d.ts +0 -1705
  462. package/dist/state/diagramStore.js +0 -808
  463. package/dist/state/diagramStore.layout.d.ts +0 -4
  464. package/dist/state/diagramStore.layout.js +0 -56
  465. package/dist/ui/DiagramTitlePanel.css.js +0 -11
  466. package/dist/ui/DiagramTitlePanel.d.ts +0 -1
  467. package/dist/ui/notation/NotationPanel.css.js +0 -16
  468. package/dist/ui/notation/NotationPanel.d.ts +0 -1
  469. package/dist/ui/top-left/TopLeftPanel.d.ts +0 -4
  470. package/dist/ui/top-left/TopLeftPanel.js +0 -211
  471. package/dist/ui/top-left/styles.css.js +0 -17
  472. package/dist/xyflow/FitviewOnDiagramChange.d.ts +0 -4
  473. package/dist/xyflow/FitviewOnDiagramChange.js +0 -72
  474. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +0 -1
  475. package/dist/xyflow/SelectEdgesOnNodeFocus.js +0 -96
  476. package/dist/xyflow/XYFlow.d.ts +0 -8
  477. package/dist/xyflow/XYFlow.js +0 -145
  478. package/dist/xyflow/XYFlowBackground.d.ts +0 -10
  479. package/dist/xyflow/XYFlowInner.d.ts +0 -8
  480. package/dist/xyflow/XYFlowInner.js +0 -41
  481. package/dist/xyflow/edges/EdgeLabel.d.ts +0 -7
  482. package/dist/xyflow/edges/EdgeLabel.js +0 -160
  483. package/dist/xyflow/edges/RelationshipEdge.d.ts +0 -6
  484. package/dist/xyflow/edges/RelationshipEdge.js +0 -443
  485. package/dist/xyflow/edges/edges.css.js +0 -37
  486. package/dist/xyflow/edges/utils.d.ts +0 -16
  487. package/dist/xyflow/edges/utils.js +0 -24
  488. package/dist/xyflow/nodes/AnimateVariants.d.ts +0 -1313
  489. package/dist/xyflow/nodes/AnimateVariants.js +0 -123
  490. package/dist/xyflow/nodes/Node.css.d.ts +0 -3
  491. package/dist/xyflow/nodes/Node.css.js +0 -9
  492. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -14
  493. package/dist/xyflow/nodes/compound/CompoundNode.css.js +0 -27
  494. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -6
  495. package/dist/xyflow/nodes/compound/CompoundNode.js +0 -216
  496. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  497. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -3
  498. package/dist/xyflow/nodes/element/ElementLink.d.ts +0 -6
  499. package/dist/xyflow/nodes/element/ElementNode.d.ts +0 -6
  500. package/dist/xyflow/nodes/element/ElementNode.js +0 -190
  501. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +0 -17
  502. package/dist/xyflow/nodes/element/element.css.d.ts +0 -18
  503. package/dist/xyflow/nodes/element/element.css.js +0 -31
  504. package/dist/xyflow/nodes/element/index.d.ts +0 -1
  505. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +0 -8
  506. package/dist/xyflow/nodes/shared/Toolbar.d.ts +0 -9
  507. package/dist/xyflow/nodes/shared/Toolbar.js +0 -436
  508. package/dist/xyflow/types.d.ts +0 -36
  509. package/dist/xyflow/useXYFlowEvents.d.ts +0 -160
  510. package/dist/xyflow/useXYFlowEvents.js +0 -275
  511. package/src/controls/Text.ts +0 -5
  512. package/src/controls/action-button-bar/ActionButtonBar.css.ts +0 -13
  513. package/src/controls/action-button-bar/ActionButtonBar.tsx +0 -138
  514. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +0 -13
  515. package/src/controls/action-buttons/ActionButton.css.ts +0 -29
  516. package/src/controls/action-buttons/ActionButton.tsx +0 -66
  517. package/src/controls/action-buttons/ActionButtons.tsx +0 -138
  518. package/src/hooks/useDiagramState.ts +0 -36
  519. package/src/overlays/OverlayContext.tsx +0 -11
  520. package/src/overlays/Overlays.css.ts +0 -136
  521. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +0 -255
  522. package/src/overlays/edge-details/_types.ts +0 -18
  523. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +0 -72
  524. package/src/overlays/edge-details/xyflow/ElementNode.tsx +0 -152
  525. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +0 -85
  526. package/src/overlays/edge-details/xyflow/styles.css.ts +0 -144
  527. package/src/overlays/index.tsx +0 -1
  528. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +0 -185
  529. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +0 -378
  530. package/src/overlays/relationships-of/_types.ts +0 -40
  531. package/src/overlays/relationships-of/use-layouted-relationships.ts +0 -699
  532. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +0 -124
  533. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +0 -194
  534. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +0 -19
  535. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +0 -127
  536. package/src/overlays/relationships-of/xyflow/styles.css.ts +0 -214
  537. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +0 -60
  538. package/src/overlays/shared/xyflow/_types.ts +0 -87
  539. package/src/state/DiagramContext.tsx +0 -107
  540. package/src/state/diagram-to-xyflow.ts +0 -150
  541. package/src/state/diagramStore.layout.ts +0 -66
  542. package/src/state/diagramStore.ts +0 -1099
  543. package/src/ui/top-left/TopLeftPanel.tsx +0 -220
  544. package/src/xyflow/FitviewOnDiagramChange.tsx +0 -83
  545. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +0 -106
  546. package/src/xyflow/XYFlow.tsx +0 -179
  547. package/src/xyflow/XYFlowInner.tsx +0 -48
  548. package/src/xyflow/edges/EdgeLabel.tsx +0 -193
  549. package/src/xyflow/edges/RelationshipEdge.tsx +0 -547
  550. package/src/xyflow/edges/edges.css.ts +0 -288
  551. package/src/xyflow/edges/utils.ts +0 -153
  552. package/src/xyflow/nodes/AnimateVariants.ts +0 -143
  553. package/src/xyflow/nodes/Node.css.ts +0 -44
  554. package/src/xyflow/nodes/compound/CompoundNode.css.ts +0 -258
  555. package/src/xyflow/nodes/compound/CompoundNode.tsx +0 -226
  556. package/src/xyflow/nodes/compound/index.ts +0 -1
  557. package/src/xyflow/nodes/element/ElementLink.css.ts +0 -67
  558. package/src/xyflow/nodes/element/ElementLink.tsx +0 -97
  559. package/src/xyflow/nodes/element/ElementNode.tsx +0 -208
  560. package/src/xyflow/nodes/element/element.css.ts +0 -369
  561. package/src/xyflow/nodes/element/index.ts +0 -1
  562. package/src/xyflow/nodes/shared/ElementIcon.tsx +0 -43
  563. package/src/xyflow/nodes/shared/Toolbar.tsx +0 -496
  564. package/src/xyflow/types.ts +0 -57
  565. package/src/xyflow/useXYFlowEvents.ts +0 -315
  566. /package/dist/{xyflow → base}/const.d.ts +0 -0
  567. /package/dist/{xyflow → base}/const.js +0 -0
  568. /package/dist/{ui → context}/EnsureMantine.d.ts +0 -0
  569. /package/dist/{ui → context}/EnsureMantine.js +0 -0
  570. /package/dist/{ui → context}/FramerMotionConfig.d.ts +0 -0
  571. /package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.d.ts +0 -0
  572. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.d.ts +0 -0
  573. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.d.ts +0 -0
  574. /package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.d.ts +0 -0
  575. /package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.d.ts +0 -0
  576. /package/dist/{ui → likec4diagram/ui/diagram-title}/Link.js +0 -0
  577. /package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.css.d.ts +0 -0
  578. /package/dist/{ui → likec4diagram/ui}/notation/index.d.ts +0 -0
  579. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.d.ts +0 -0
  580. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.d.ts +0 -0
  581. /package/src/{ui → context}/EnsureMantine.tsx +0 -0
  582. /package/src/{ui → likec4diagram/ui}/notation/index.ts +0 -0
@@ -0,0 +1,234 @@
1
+ import type { DiagramEdge, DiagramView } from '@likec4/core'
2
+ import { ActionIcon, Group } from '@mantine/core'
3
+ import { useCallbackRef, useStateHistory } from '@mantine/hooks'
4
+ import { IconChevronLeft, IconChevronRight, IconX } from '@tabler/icons-react'
5
+ import { Panel, ReactFlowProvider, useEdgesState, useNodesState } from '@xyflow/react'
6
+ import clsx from 'clsx'
7
+ import { AnimatePresence, LayoutGroup, m } from 'framer-motion'
8
+ import { memo, useEffect, useRef } from 'react'
9
+ import { BaseXYFlow } from '../../base/BaseXYFlow'
10
+ import { updateEdges } from '../../base/updateEdges'
11
+ import { updateNodes } from '../../base/updateNodes'
12
+ import { useUpdateEffect } from '../../hooks'
13
+ import type { RelationshipDetailsTypes as Types } from './_types'
14
+ import type { RelationshipDetailsActorRef, RelationshipDetailsSnapshot } from './actor'
15
+ import { edgeTypes } from './custom/edgeTypes'
16
+ import { nodeTypes } from './custom/nodeTypes'
17
+ import {
18
+ RelationshipDetailsActorContext,
19
+ useRelationshipDetails,
20
+ useRelationshipsBrowserState,
21
+ } from './hooks'
22
+ import { SelectEdge } from './SelectEdge'
23
+ import { useLayoutedDetails } from './useLayoutedDetails'
24
+
25
+ export type RelationshipDetailsProps = {
26
+ actorRef: RelationshipDetailsActorRef
27
+ }
28
+ export function RelationshipDetails({ actorRef }: RelationshipDetailsProps) {
29
+ // const actorRef = useDiagramActorState(s => s.children.relationshipsBrowser)
30
+ // if (actorRef == null) {
31
+ // return null
32
+ // }
33
+ const initialRef = useRef<{
34
+ defaultNodes: Types.Node[]
35
+ defaultEdges: Types.Edge[]
36
+ }>(null)
37
+
38
+ if (initialRef.current == null) {
39
+ initialRef.current = {
40
+ defaultNodes: [],
41
+ defaultEdges: [],
42
+ }
43
+ }
44
+
45
+ return (
46
+ <RelationshipDetailsActorContext.Provider value={actorRef}>
47
+ <ReactFlowProvider {...initialRef.current}>
48
+ <RelationshipDetailsInner />
49
+ </ReactFlowProvider>
50
+ </RelationshipDetailsActorContext.Provider>
51
+ )
52
+ }
53
+
54
+ const selector = (state: RelationshipDetailsSnapshot) => ({
55
+ edgeId: state.context.edgeId,
56
+ view: state.context.view,
57
+ initialized: state.context.initialized,
58
+ })
59
+
60
+ const RelationshipDetailsInner = memo(() => {
61
+ const browser = useRelationshipDetails()
62
+ const {
63
+ edgeId,
64
+ view,
65
+ initialized,
66
+ } = useRelationshipsBrowserState(selector)
67
+
68
+ const {
69
+ edge,
70
+ xynodes,
71
+ xyedges,
72
+ bounds,
73
+ } = useLayoutedDetails(edgeId, view)
74
+ const [nodes, setNodes, onNodesChange] = useNodesState(xynodes)
75
+ const [edges, setEdges, onEdgesChange] = useEdgesState(xyedges)
76
+
77
+ useUpdateEffect(() => {
78
+ setNodes(updateNodes(xynodes))
79
+ setEdges(updateEdges(xyedges))
80
+ }, [xynodes, xyedges])
81
+
82
+ const [historyEdgeId, historyOps, { history, current }] = useStateHistory(edgeId)
83
+
84
+ useEffect(() => {
85
+ if (historyEdgeId !== edgeId) {
86
+ historyOps.set(edgeId)
87
+ }
88
+ }, [edgeId])
89
+
90
+ useEffect(() => {
91
+ if (historyEdgeId !== edgeId) {
92
+ // browser.navigateTo(historyEdgeId)
93
+ }
94
+ }, [historyEdgeId])
95
+
96
+ const hasStepBack = current > 0
97
+ const hasStepForward = current + 1 < history.length
98
+
99
+ return (
100
+ <LayoutGroup>
101
+ <BaseXYFlow<Types.Node, Types.Edge>
102
+ id="relationship-details"
103
+ nodes={nodes}
104
+ edges={edges}
105
+ className={clsx(initialized ? 'initialized' : 'not-initialized')}
106
+ nodeTypes={nodeTypes}
107
+ edgeTypes={edgeTypes}
108
+ onEdgesChange={onEdgesChange}
109
+ onNodesChange={onNodesChange}
110
+ fitViewPadding={0.05}
111
+ onInit={useCallbackRef((instance) => {
112
+ browser.send({ type: 'xyflow.init', instance })
113
+ })}
114
+ onNodeClick={useCallbackRef((e, node) => {
115
+ e.stopPropagation()
116
+ browser.send({ type: 'xyflow.nodeClick', node })
117
+ })}
118
+ onEdgeClick={useCallbackRef((e, edge) => {
119
+ e.stopPropagation()
120
+ browser.send({ type: 'xyflow.edgeClick', edge })
121
+ })}
122
+ onPaneClick={useCallbackRef((e) => {
123
+ e.stopPropagation()
124
+ browser.send({ type: 'xyflow.paneClick' })
125
+ })}
126
+ onViewportResize={() => {
127
+ browser.send({ type: 'xyflow.resized' })
128
+ }}
129
+ nodesDraggable={false}
130
+ fitView={false}
131
+ pannable
132
+ zoomable
133
+ >
134
+ <TopLeftPanel
135
+ edge={edge}
136
+ view={view}
137
+ hasStepBack={hasStepBack}
138
+ hasStepForward={hasStepForward}
139
+ onStepBack={() => historyOps.back()}
140
+ onStepForward={() => historyOps.forward()}
141
+ />
142
+ <Panel position="top-right">
143
+ <ActionIcon
144
+ variant="default"
145
+ color="gray"
146
+ // color="gray"
147
+ // size={'lg'}
148
+ // data-autofocus
149
+ // autoFocus
150
+ onClick={(e) => {
151
+ e.stopPropagation()
152
+ browser.close()
153
+ }}>
154
+ <IconX />
155
+ </ActionIcon>
156
+ </Panel>
157
+ </BaseXYFlow>
158
+ </LayoutGroup>
159
+ )
160
+ })
161
+
162
+ type TopLeftPanelProps = {
163
+ edge: DiagramEdge
164
+ view: DiagramView
165
+ hasStepBack: boolean
166
+ hasStepForward: boolean
167
+ onStepBack: () => void
168
+ onStepForward: () => void
169
+ }
170
+ const TopLeftPanel = ({
171
+ edge,
172
+ view,
173
+ hasStepBack,
174
+ hasStepForward,
175
+ onStepBack,
176
+ onStepForward,
177
+ }: TopLeftPanelProps) => {
178
+ const browser = useRelationshipDetails()
179
+ return (
180
+ <Panel position="top-left">
181
+ <Group gap={4} wrap={'nowrap'}>
182
+ <AnimatePresence mode="popLayout">
183
+ {hasStepBack && (
184
+ <m.div
185
+ layout
186
+ initial={{ opacity: 0.05, transform: 'translateX(-5px)' }}
187
+ animate={{ opacity: 1, transform: 'translateX(0)' }}
188
+ exit={{
189
+ opacity: 0.05,
190
+ transform: 'translateX(-10px)',
191
+ }}
192
+ key={'back'}>
193
+ <ActionIcon
194
+ variant="default"
195
+ color="gray"
196
+ onClick={e => {
197
+ e.stopPropagation()
198
+ onStepBack()
199
+ }}>
200
+ <IconChevronLeft />
201
+ </ActionIcon>
202
+ </m.div>
203
+ )}
204
+ {hasStepForward && (
205
+ <m.div
206
+ layout
207
+ initial={{ opacity: 0.05, transform: 'translateX(5px)' }}
208
+ animate={{ opacity: 1, transform: 'translateX(0)' }}
209
+ exit={{
210
+ opacity: 0,
211
+ transform: 'translateX(5px)',
212
+ }}
213
+ key={'forward'}>
214
+ <ActionIcon
215
+ variant="default"
216
+ color="gray"
217
+ onClick={e => {
218
+ e.stopPropagation()
219
+ onStepForward()
220
+ }}>
221
+ <IconChevronRight />
222
+ </ActionIcon>
223
+ </m.div>
224
+ )}
225
+
226
+ <Group gap={'xs'} wrap={'nowrap'} ml={'sm'}>
227
+ {/* <Box fz={'xs'} fw={'500'} style={{ whiteSpace: 'nowrap', userSelect: 'none' }}>Relationships of</Box> */}
228
+ <SelectEdge edge={edge} view={view} />
229
+ </Group>
230
+ </AnimatePresence>
231
+ </Group>
232
+ </Panel>
233
+ )
234
+ }
@@ -4,25 +4,25 @@ import { mantine } from '../../theme-vars'
4
4
  const edgeEnpoint = style({
5
5
  display: 'inline-flex',
6
6
  alignItems: 'center',
7
- padding: '6px 2px 0 2px'
7
+ padding: '6px 2px 0 2px',
8
8
  })
9
9
 
10
10
  globalStyle(`${edgeEnpoint} .mantine-Text-root`, {
11
11
  fontSize: mantine.fontSizes.xs,
12
12
  fontWeight: 500,
13
- lineHeight: 1
13
+ lineHeight: 1,
14
14
  })
15
15
 
16
16
  export const edgeSource = style([{
17
17
  paddingLeft: 4,
18
- gridColumn: 1
18
+ gridColumn: 1,
19
19
  }, edgeEnpoint])
20
20
  export const edgeArrow = style([{
21
- gridColumn: 2
21
+ gridColumn: 2,
22
22
  }, edgeEnpoint])
23
23
  export const edgeTarget = style([{
24
24
  gridColumn: 3,
25
- paddingRight: 4
25
+ paddingRight: 4,
26
26
  }, edgeEnpoint])
27
27
 
28
28
  export const edgeLabel = style({
@@ -31,7 +31,7 @@ export const edgeLabel = style({
31
31
  gridColumnEnd: 4,
32
32
  borderBottom: `1px solid ${mantine.colors.defaultBorder}`,
33
33
  marginBottom: '0px',
34
- padding: '0 4px 5px 4px'
34
+ padding: '0 4px 5px 4px',
35
35
  // gridArea: '2 / 1 / 3 / 3',
36
36
  // selectors: {
37
37
  // '&:last-child': {
@@ -44,26 +44,26 @@ export const edgeLabel = style({
44
44
  globalStyle(`${edgeLabel} .mantine-Text-root`, {
45
45
  fontSize: mantine.fontSizes.sm,
46
46
  fontWeight: 400,
47
- color: mantine.colors.dimmed
47
+ color: mantine.colors.dimmed,
48
48
  })
49
49
 
50
50
  export const edgeRow = style({
51
- display: 'contents'
51
+ display: 'contents',
52
52
  })
53
53
 
54
54
  globalStyle(`${edgeRow}:last-child ${edgeLabel}`, {
55
55
  borderBottom: 'none',
56
- marginBottom: 0
56
+ marginBottom: 0,
57
57
  })
58
58
 
59
59
  globalStyle(`${edgeRow} > *`, {
60
- transition: 'all 0.15s ease-in'
60
+ transition: 'all 0.15s ease-in',
61
61
  })
62
62
 
63
63
  globalStyle(`${edgeRow}:is(:hover, [data-selected=true]) > *`, {
64
64
  transition: 'all 0.15s ease-out',
65
65
  cursor: 'pointer',
66
- backgroundColor: mantine.colors.defaultHover
66
+ backgroundColor: mantine.colors.defaultHover,
67
67
  })
68
68
 
69
69
  export const edgeGrid = style({
@@ -71,7 +71,7 @@ export const edgeGrid = style({
71
71
  gridTemplateColumns: '1fr 30px 1fr',
72
72
  gridAutoRows: 'min-content max-content',
73
73
  gap: 0,
74
- alignItems: 'stretch'
74
+ alignItems: 'stretch',
75
75
  // gridTemplateColumns: 'auto',
76
76
  // gridTemplateRows: `
77
77
  // [row1-start] "source target" auto [row1-end]
@@ -95,5 +95,12 @@ export const edgeDataGrid = style({
95
95
  gridAutoRows: 'min-content max-content',
96
96
  gap: '10px 12px',
97
97
  alignItems: 'baseline',
98
- justifyItems: 'start'
98
+ justifyItems: 'start',
99
+ })
100
+
101
+ export const scrollArea = style({
102
+ maxHeight: [
103
+ '70vh',
104
+ 'calc(100cqh - 70px)',
105
+ ],
99
106
  })
@@ -8,23 +8,25 @@ import {
8
8
  ScrollAreaAutosize,
9
9
  Text,
10
10
  ThemeIcon,
11
- useComputedColorScheme
11
+ useComputedColorScheme,
12
12
  } from '@mantine/core'
13
13
  import { IconArrowRight, IconSelector } from '@tabler/icons-react'
14
14
  import { useRef } from 'react'
15
- import { useOverlayDialog } from '../OverlayContext'
15
+ import { useMantinePortalProps } from '../../hooks'
16
+ import { useRelationshipDetails } from './hooks'
16
17
  import * as css from './SelectEdge.css'
17
18
 
18
19
  export const SelectEdge = ({
19
20
  edge,
20
- view
21
+ view,
21
22
  }: {
22
23
  edge: DiagramEdge
23
24
  view: DiagramView
24
25
  // onSelect: (id: Fqn) => void
25
26
  }) => {
26
- const overlay = useOverlayDialog()
27
+ const overlay = useRelationshipDetails()
27
28
  const viewport = useRef<HTMLDivElement>(null)
29
+ const portalProps = useMantinePortalProps()
28
30
  // const data = useLikeC4ElementsTree(scope === 'view' ? viewId : undefined)
29
31
  // const tree = useTree({
30
32
  // multiple: false
@@ -49,13 +51,13 @@ export const SelectEdge = ({
49
51
  id: edge.id,
50
52
  source,
51
53
  target,
52
- label: edge.label
54
+ label: edge.label,
53
55
  }
54
56
  })
55
57
 
56
58
  return (
57
59
  <Popover
58
- position="bottom"
60
+ position="bottom-start"
59
61
  shadow="md"
60
62
  keepMounted
61
63
  withinPortal={false}
@@ -82,7 +84,7 @@ export const SelectEdge = ({
82
84
  maw={160}
83
85
  p={0}
84
86
  mod={{
85
- 'likec4-color': edgeSource.color
87
+ 'likec4-color': edgeSource.color,
86
88
  }}
87
89
  >
88
90
  <Text component="span" truncate>{edgeSource.title}</Text>
@@ -95,7 +97,7 @@ export const SelectEdge = ({
95
97
  maw={160}
96
98
  p={0}
97
99
  mod={{
98
- 'likec4-color': edgeTarget.color
100
+ 'likec4-color': edgeTarget.color,
99
101
  }}
100
102
  >
101
103
  <Text component="span" truncate>{edgeTarget.title}</Text>
@@ -103,7 +105,7 @@ export const SelectEdge = ({
103
105
  </Button>
104
106
  </PopoverTarget>
105
107
  <PopoverDropdown p={0} miw={250} maw={420}>
106
- <ScrollAreaAutosize mah={'70vh'} scrollbars="y" type="never" viewportRef={viewport}>
108
+ <ScrollAreaAutosize className={css.scrollArea} scrollbars="y" type="never" viewportRef={viewport}>
107
109
  <Box className={css.edgeGrid} p="xs">
108
110
  {edges.map(e => (
109
111
  <div
@@ -112,16 +114,14 @@ export const SelectEdge = ({
112
114
  data-selected={e.id === edge.id}
113
115
  onClick={event => {
114
116
  event.stopPropagation()
115
- overlay.openOverlay({
116
- edgeDetails: e.id
117
- })
117
+ overlay.navigateTo(e.id)
118
118
  }}>
119
119
  <Box
120
120
  className={css.edgeSource}
121
121
  maw={160}
122
122
  mod={{
123
123
  'edge-id': e.id,
124
- 'likec4-color': e.source.color
124
+ 'likec4-color': e.source.color,
125
125
  }}
126
126
  >
127
127
  <Text component="span" truncate>{e.source.title}</Text>
@@ -135,7 +135,7 @@ export const SelectEdge = ({
135
135
  className={css.edgeTarget}
136
136
  maw={160}
137
137
  mod={{
138
- 'likec4-color': e.target.color
138
+ 'likec4-color': e.target.color,
139
139
  }}
140
140
  >
141
141
  <Text component="span" truncate>{e.target.title}</Text>
@@ -0,0 +1,73 @@
1
+ import type { Color, DiagramNode, Fqn, RelationId, RelationshipLineType, ViewId } from '@likec4/core'
2
+ import type { Base, NonOptional, ReactFlowEdge, ReactFlowNode } from '../../base/types'
3
+
4
+ export namespace RelationshipDetailsTypes {
5
+ /**
6
+ * The node's incoming and outgoing ports
7
+ */
8
+ export type Ports = {
9
+ in: string[]
10
+ out: string[]
11
+ }
12
+
13
+ export type ElementNodeData = Base.NodeData<
14
+ & NonOptional<
15
+ Pick<
16
+ DiagramNode,
17
+ | 'title'
18
+ | 'technology'
19
+ | 'description'
20
+ | 'color'
21
+ | 'shape'
22
+ | 'width'
23
+ | 'height'
24
+ | 'navigateTo'
25
+ | 'style'
26
+ >
27
+ >
28
+ & {
29
+ fqn: Fqn
30
+ icon: string | null
31
+ ports: Ports
32
+ }
33
+ >
34
+
35
+ export type CompoundNodeData = Base.NodeData<
36
+ & NonOptional<
37
+ Pick<
38
+ DiagramNode,
39
+ | 'title'
40
+ | 'color'
41
+ | 'shape'
42
+ | 'style'
43
+ >
44
+ >
45
+ & {
46
+ fqn: Fqn
47
+ depth: number
48
+ icon: string | null
49
+ ports: Ports
50
+ }
51
+ >
52
+
53
+ export type ElementNode = ReactFlowNode<ElementNodeData, 'element'>
54
+
55
+ export type CompoundNode = ReactFlowNode<CompoundNodeData, 'compound'>
56
+
57
+ export type Node = ElementNode | CompoundNode
58
+ export type NodeData = Node['data']
59
+
60
+ // Extend the edge types provided by SharedFlowTypes with RelationshipsOfEdgeData
61
+
62
+ export type EdgeData = Base.EdgeData<{
63
+ relationId: RelationId
64
+ color: Color | undefined
65
+ label: string | null
66
+ technology?: string | undefined
67
+ description?: string | undefined
68
+ navigateTo: ViewId | null
69
+ line: RelationshipLineType
70
+ }>
71
+
72
+ export type Edge = ReactFlowEdge<EdgeData, 'relationship'>
73
+ }
@@ -0,0 +1,162 @@
1
+ import { type BBox, type DiagramView, type EdgeId, invariant } from '@likec4/core'
2
+ import {
3
+ type ReactFlowInstance,
4
+ } from '@xyflow/react'
5
+ import { prop } from 'remeda'
6
+ import {
7
+ type ActorLogic,
8
+ type ActorRefFromLogic,
9
+ type MachineSnapshot,
10
+ type SnapshotFrom,
11
+ assign,
12
+ cancel,
13
+ raise,
14
+ setup,
15
+ } from 'xstate'
16
+ import { MinZoom } from '../../base/const'
17
+ import type { RelationshipDetailsTypes } from './_types'
18
+
19
+ type XYFLowInstance = ReactFlowInstance<RelationshipDetailsTypes.Node, RelationshipDetailsTypes.Edge>
20
+
21
+ export type Input = {
22
+ edgeId: EdgeId
23
+ view: DiagramView
24
+ // scope?: DiagramView | null
25
+ // parentRef?: AnyActorRef| null
26
+ }
27
+
28
+ export type Context = Readonly<
29
+ Input & {
30
+ // parentRef: AnyActorRef | null
31
+ xyflow: XYFLowInstance | null
32
+ initialized: boolean
33
+ // bounds: BBox | null
34
+ }
35
+ >
36
+
37
+ export type Events =
38
+ | { type: 'xyflow.init'; instance: XYFLowInstance }
39
+ | { type: 'xyflow.nodeClick'; node: RelationshipDetailsTypes.Node }
40
+ | { type: 'xyflow.edgeClick'; edge: RelationshipDetailsTypes.Edge }
41
+ | { type: 'xyflow.paneClick' }
42
+ | { type: 'xyflow.resized' }
43
+ // | { type: 'update.bounds'; bounds: BBox }
44
+ | { type: 'fitDiagram'; duration?: number; bounds?: BBox }
45
+ | { type: 'navigate.to'; edgeId: EdgeId }
46
+ | { type: 'close' }
47
+
48
+ export const relationshipDetailsActor = setup({
49
+ types: {
50
+ context: {} as Context,
51
+ input: {} as Input,
52
+ events: {} as Events,
53
+ },
54
+ actions: {
55
+ 'xyflow:fitDiagram': ({ context }, params?: { duration?: number; bounds?: BBox }) => {
56
+ const {
57
+ duration = 450,
58
+ bounds,
59
+ } = params ?? {}
60
+ const { xyflow } = context
61
+ invariant(xyflow, 'xyflow is not initialized')
62
+ if (bounds) {
63
+ xyflow.fitBounds(bounds, duration > 0 ? { duration } : undefined)
64
+ } else {
65
+ const maxZoom = Math.max(xyflow.getZoom(), 1)
66
+ xyflow.fitView({
67
+ minZoom: MinZoom,
68
+ maxZoom,
69
+ padding: 0.1,
70
+ ...(duration > 0 && { duration }),
71
+ })
72
+ }
73
+ },
74
+ },
75
+ guards: {
76
+ 'enable: navigate.to': () => true,
77
+ },
78
+ }).createMachine({
79
+ initial: 'opening',
80
+ context: ({ input }) => ({
81
+ ...input,
82
+ initialized: false,
83
+ xyflow: null,
84
+ }),
85
+ states: {
86
+ 'opening': {
87
+ on: {
88
+ 'xyflow.init': {
89
+ actions: assign({
90
+ initialized: true,
91
+ xyflow: ({ event }) => event.instance,
92
+ }),
93
+ target: 'active',
94
+ },
95
+ 'close': {
96
+ target: 'closed',
97
+ },
98
+ },
99
+ },
100
+ 'active': {
101
+ entry: {
102
+ type: 'xyflow:fitDiagram',
103
+ params: { duration: 0 },
104
+ },
105
+ on: {
106
+ // 'xyflow.nodeClick': {
107
+ // actions: enqueueActions(({ event, enqueue }) => {
108
+ // if ('fqn' in event.node.data) {
109
+ // const fqn = event.node.data.fqn
110
+ // enqueue.assign({
111
+ // subject: fqn,
112
+ // })
113
+ // enqueue.raise({ type: 'fitDiagram' }, { delay: 50 })
114
+ // }
115
+ // }),
116
+ // },
117
+ 'navigate.to': {
118
+ actions: [
119
+ assign({
120
+ edgeId: ({ event }) => event.edgeId,
121
+ }),
122
+ raise({ type: 'fitDiagram' }, { delay: 50 }),
123
+ ],
124
+ },
125
+ 'close': {
126
+ target: 'closed',
127
+ },
128
+ },
129
+ exit: assign({
130
+ initialized: false,
131
+ xyflow: null,
132
+ }),
133
+ },
134
+ 'closed': {
135
+ type: 'final',
136
+ },
137
+ },
138
+ on: {
139
+ 'fitDiagram': {
140
+ actions: {
141
+ type: 'xyflow:fitDiagram',
142
+ params: prop('event'),
143
+ },
144
+ },
145
+ 'xyflow.resized': {
146
+ actions: [
147
+ cancel('fitDiagram'),
148
+ raise({ type: 'fitDiagram' }, { id: 'fitDiagram', delay: 200 }),
149
+ ],
150
+ },
151
+ },
152
+ }) as unknown as ActorLogic<
153
+ MachineSnapshot<Context, Events, any, 'opening' | 'active' | 'closed', any, any, any, any>,
154
+ Events,
155
+ Input,
156
+ any,
157
+ any
158
+ > // TODO reduce type inference by forcing the types
159
+
160
+ export type RelationshipDetailsLogic = typeof relationshipDetailsActor
161
+ export type RelationshipDetailsActorRef = ActorRefFromLogic<typeof relationshipDetailsActor>
162
+ export type RelationshipDetailsSnapshot = SnapshotFrom<RelationshipDetailsActorRef>