@likec4/diagram 1.19.2 → 1.20.1

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 +24 -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 -8
  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 +125 -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 -18
  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
@@ -1,20 +1,22 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
- import { invariant, isScopedElementView, isDeploymentView } from "@likec4/core";
2
+ import { isScopedElementView, isDeploymentView } from "@likec4/core";
3
3
  import { Divider as Divider$1, Tooltip as Tooltip$1, Text, RemoveScroll, Card, FocusTrap, FocusTrapInitialFocus, Box, Group, CloseButton, Badge, Flex, ActionIconGroup, ActionIcon, Tabs, TabsList, TabsTab, TabsPanel, ScrollArea, Stack, UnstyledButton, ThemeIcon, CopyButton, Anchor, Code } from "@mantine/core";
4
- import { useViewportSize, useSessionStorage } from "@mantine/hooks";
4
+ import { useViewportSize, useSessionStorage, useDebouncedCallback } from "@mantine/hooks";
5
5
  import { IconExternalLink, IconFileSymlink, IconZoomScan, IconStack2, IconCheck, IconCopy } from "@tabler/icons-react";
6
- import clsx from "clsx";
6
+ import "clsx";
7
7
  import { useDragControls, useMotionValue, m } from "framer-motion";
8
- import { memo, useCallback, useRef, useEffect } from "react";
9
- import { pick, pipe, map, partition, find, only, clamp, isNullish } from "remeda";
10
- import { useOverlayDialog } from "../OverlayContext.js";
11
- import { propertyLabel, dialog, card, cardHeader, title, tabsRoot, tabsList, tabsTab, tabsPanel, propertiesGrid, resizeHandle, elementIcon, viewButton, viewButtonTitle, elementLink } from "./ElementDetailsCard.css.js";
8
+ import { memo, useCallback, useRef, useLayoutEffect } from "react";
9
+ import { pipe, map, partition, only, clamp, isNullish } from "remeda";
10
+ import { useDiagram } from "../../hooks/useDiagram.js";
11
+ import { useDiagramContext } from "../../hooks/useDiagramContext.js";
12
+ import { propertyLabel, elementIcon, dialog, card, cardHeader, title, tabsRoot, tabsList, tabsTab, tabsPanel, propertiesGrid, resizeHandle, viewButton, viewButtonTitle, elementLink } from "./ElementDetailsCard.css.js";
12
13
  import { TabPanelDeployments } from "./TabPanelDeployments.js";
13
14
  import { TabPanelRelationships } from "./TabPanelRelationships.js";
14
15
  import { TabPanelStructure } from "./TabPanelStructure.js";
15
- import { useXYFlow, useXYInternalNode } from "../../hooks/useXYFlow.js";
16
- import { useLikeC4CurrentViewModel } from "../../likec4model/useLikeC4Model.js";
17
- import { useDiagramStoreApi, useDiagramState } from "../../hooks/useDiagramState.js";
16
+ import { useLikeC4Model } from "../../likec4model/useLikeC4Model.js";
17
+ import { useUpdateEffect } from "../../hooks/useUpdateEffect.js";
18
+ import { IconRenderer } from "../../context/IconRenderer.js";
19
+ import { IfEnabled } from "../../context/DiagramFeatures.js";
18
20
  const Divider = Divider$1.withProps({
19
21
  mb: 8,
20
22
  labelPosition: "left",
@@ -45,35 +47,30 @@ const PropertyLabel = Text.withProps({
45
47
  const MIN_PADDING = 24;
46
48
  const TABS = ["Properties", "Relationships", "Views", "Structure", "Deployments"];
47
49
  const ElementDetailsCard = memo(({ fqn }) => {
48
- var _a;
50
+ var _a, _b, _c;
51
+ const {
52
+ viewId,
53
+ fromNode,
54
+ rectFromNode
55
+ } = useDiagramContext((s) => {
56
+ var _a2, _b2;
57
+ return {
58
+ viewId: s.view.id,
59
+ fromNode: ((_a2 = s.activeElementDetails) == null ? void 0 : _a2.fromNode) ?? null,
60
+ rectFromNode: ((_b2 = s.activeElementDetails) == null ? void 0 : _b2.nodeRectScreen) ?? null
61
+ };
62
+ });
49
63
  const windowSize = useViewportSize();
50
64
  const windowWidth = windowSize.width || window.innerWidth || 1200, windowHeight = windowSize.height || window.innerHeight || 800;
51
- const xyflow = useXYFlow();
52
- const xynode = useXYInternalNode(fqn);
53
- invariant(xynode, `XYNode with id ${fqn} not found`);
54
- const overlay = useOverlayDialog();
55
65
  const [activeTab, setActiveTab] = useSessionStorage({
56
66
  key: `likec4:element-details:active-tab`,
57
67
  defaultValue: "Properties"
58
68
  });
59
- const diagramApi = useDiagramStoreApi();
60
- const viewModel = useLikeC4CurrentViewModel();
61
- const {
62
- view: currentView,
63
- renderIcon,
64
- onOpenSource
65
- } = useDiagramState(pick(["view", "renderIcon", "onNavigateTo", "onOpenSource"]));
66
- const diagramNode = currentView.nodes.find((n) => n.id === fqn);
67
- invariant(diagramNode, `DiagramNode with fqn ${fqn} not found`);
68
- const nodeModel = viewModel.findNode(fqn);
69
- invariant(nodeModel && nodeModel.hasElement(), `NodeModel with fqn ${fqn} not found`);
70
- const elementModel = nodeModel.element;
71
- const viewId = viewModel.id;
72
- const elementIcon2 = ElementIcon({
73
- element: nodeModel.$node,
74
- viewId,
75
- renderIcon
76
- });
69
+ const diagram = useDiagram();
70
+ const likec4model = useLikeC4Model(true);
71
+ const viewModel = likec4model.view(viewId);
72
+ const nodeModel = fromNode ? viewModel.findNode(fromNode) : viewModel.findNodeWithElement(fqn);
73
+ const elementModel = viewModel.$model.element(fqn);
77
74
  const [viewsOf, otherViews] = pipe(
78
75
  [...elementModel.views()],
79
76
  map((v) => v.$view),
@@ -82,33 +79,23 @@ const ElementDetailsCard = memo(({ fqn }) => {
82
79
  return isScopedElementView(v) && v.viewOf === fqn;
83
80
  })
84
81
  );
85
- const defaultView = ((_a = nodeModel.navigateTo) == null ? void 0 : _a.$view) ?? find(viewsOf, (v) => v.id !== viewModel.id) ?? null;
86
- const defaultLink = only(nodeModel.links);
87
- const onNavigateToCb = useCallback((toView, e) => {
88
- e == null ? void 0 : e.stopPropagation();
89
- const { onNavigateTo } = diagramApi.getState();
90
- if (!onNavigateTo) {
91
- return;
92
- }
93
- overlay.close(() => {
94
- diagramApi.setState({
95
- lastOnNavigate: {
96
- fromView: viewModel.id,
97
- toView,
98
- fromNode: fqn
99
- }
100
- });
101
- onNavigateTo(toView);
102
- });
103
- }, [fqn, viewModel.id]);
82
+ let defaultView = ((_a = nodeModel == null ? void 0 : nodeModel.navigateTo) == null ? void 0 : _a.$view) ?? ((_b = elementModel.defaultView) == null ? void 0 : _b.$view) ?? null;
83
+ if ((defaultView == null ? void 0 : defaultView.id) === viewId) {
84
+ defaultView = null;
85
+ }
86
+ const defaultLink = only(elementModel.links);
104
87
  const controls = useDragControls();
105
- const isCompound = nodeModel.children.length > 0;
106
- const fromPositon = xyflow.flowToScreenPosition({
107
- x: xynode.internals.positionAbsolute.x + diagramNode.width / 2,
108
- y: xynode.internals.positionAbsolute.y + (isCompound ? 0 : diagramNode.height / 2)
109
- });
88
+ const isCompound = (((_c = nodeModel == null ? void 0 : nodeModel.$node.children) == null ? void 0 : _c.length) ?? 0) > 0;
110
89
  const _width = Math.min(700, windowWidth - MIN_PADDING * 2);
111
90
  const _height = Math.min(650, windowHeight - MIN_PADDING * 2);
91
+ const fromPositon = rectFromNode ? {
92
+ x: rectFromNode.x + (isCompound ? rectFromNode.width - _width / 2 : rectFromNode.width / 2),
93
+ y: rectFromNode.y + (isCompound ? 0 : rectFromNode.height / 2)
94
+ } : {
95
+ x: windowWidth / 2,
96
+ y: windowHeight / 2
97
+ };
98
+ const fromScale = rectFromNode ? Math.min(rectFromNode.width / _width, rectFromNode.height / _height, 0.9) : 1;
112
99
  const left = Math.round(
113
100
  clamp(fromPositon.x - _width / 2, {
114
101
  min: MIN_PADDING,
@@ -121,44 +108,76 @@ const ElementDetailsCard = memo(({ fqn }) => {
121
108
  max: windowHeight - _height - MIN_PADDING
122
109
  })
123
110
  );
111
+ const originX = clamp((fromPositon.x - left) / _width, {
112
+ min: 0.1,
113
+ max: 0.9
114
+ });
115
+ const originY = clamp((fromPositon.y - top) / _height, {
116
+ min: 0.1,
117
+ max: 0.9
118
+ });
124
119
  const width = useMotionValue(_width);
125
120
  const height = useMotionValue(_height);
121
+ useUpdateEffect(() => {
122
+ width.set(_width);
123
+ height.set(_height);
124
+ }, [_width, _height]);
126
125
  const handleDrag = useCallback((_, info) => {
127
126
  width.set(Math.max(width.get() + info.delta.x, 320));
128
127
  height.set(Math.max(height.get() + info.delta.y, 300));
129
128
  }, []);
130
129
  const ref = useRef(null);
131
- useEffect(() => {
130
+ useLayoutEffect(() => {
132
131
  var _a2;
133
132
  (_a2 = ref.current) == null ? void 0 : _a2.showModal();
134
133
  }, []);
134
+ const diagramApi = useDiagram();
135
+ const close = useDebouncedCallback(
136
+ () => {
137
+ diagramApi.closeOverlay();
138
+ },
139
+ 50
140
+ );
141
+ const notation = (nodeModel == null ? void 0 : nodeModel.$node.notation) ?? null;
142
+ const elementIcon$1 = IconRenderer({
143
+ element: {
144
+ id: fqn,
145
+ title: elementModel.title,
146
+ icon: (nodeModel == null ? void 0 : nodeModel.icon) ?? elementModel.icon
147
+ },
148
+ className: elementIcon
149
+ });
135
150
  return /* @__PURE__ */ jsx(
136
151
  m.dialog,
137
152
  {
138
153
  ref,
139
154
  className: dialog,
155
+ layoutRoot: true,
140
156
  initial: {
141
157
  "--backdrop-blur": "0px",
142
- "--backdrop-opacity": "0%"
158
+ "--backdrop-opacity": "10%"
143
159
  },
144
160
  animate: {
145
- "--backdrop-blur": "1px",
146
- "--backdrop-opacity": "50%"
161
+ "--backdrop-blur": "3px",
162
+ "--backdrop-opacity": "60%"
147
163
  },
148
164
  exit: {
149
165
  "--backdrop-blur": "0px",
150
- "--backdrop-opacity": "0%"
166
+ "--backdrop-opacity": "0%",
167
+ transition: {
168
+ duration: 0.1
169
+ }
151
170
  },
152
171
  onClick: (e) => {
153
- var _a2, _b;
154
- if (((_b = (_a2 = e.target) == null ? void 0 : _a2.nodeName) == null ? void 0 : _b.toUpperCase()) === "DIALOG") {
172
+ var _a2, _b2;
173
+ if (((_b2 = (_a2 = e.target) == null ? void 0 : _a2.nodeName) == null ? void 0 : _b2.toUpperCase()) === "DIALOG") {
155
174
  e.stopPropagation();
156
- overlay.close();
175
+ close();
157
176
  }
158
177
  },
159
178
  onClose: (e) => {
160
179
  e.stopPropagation();
161
- overlay.close();
180
+ close();
162
181
  },
163
182
  children: /* @__PURE__ */ jsx(RemoveScroll, { forwardProps: true, children: /* @__PURE__ */ jsx(
164
183
  Card,
@@ -172,33 +191,35 @@ const ElementDetailsCard = memo(({ fqn }) => {
172
191
  shadow: "md",
173
192
  component: m.div,
174
193
  className: card,
175
- layoutId: `${viewId}:element:${fqn}`,
194
+ layoutId: fqn,
176
195
  initial: {
177
196
  top,
178
197
  left,
179
198
  width: _width,
180
199
  height: _height,
181
- opacity: 0
200
+ opacity: 0,
201
+ originX,
202
+ originY,
203
+ scale: Math.max(fromScale, 0.7)
182
204
  },
183
205
  animate: {
184
- opacity: 1
206
+ opacity: 1,
207
+ scale: 1
185
208
  },
186
209
  exit: {
187
- opacity: 0
210
+ opacity: 0,
211
+ scale: 0.9,
212
+ translateY: -10,
213
+ transition: {
214
+ duration: 0.1
215
+ }
188
216
  },
189
217
  style: {
190
218
  // `style` prop in Mantine doesn't accept motion values
191
219
  width,
192
220
  height
193
221
  },
194
- onKeyDown: (e) => {
195
- if (e.key === "Escape") {
196
- e.preventDefault();
197
- e.stopPropagation();
198
- overlay.close();
199
- }
200
- },
201
- "data-likec4-color": nodeModel.color,
222
+ "data-likec4-color": (nodeModel == null ? void 0 : nodeModel.color) ?? elementModel.color,
202
223
  children: /* @__PURE__ */ jsxs(FocusTrap, { children: [
203
224
  /* @__PURE__ */ jsx(FocusTrapInitialFocus, {}),
204
225
  /* @__PURE__ */ jsxs(
@@ -209,7 +230,7 @@ const ElementDetailsCard = memo(({ fqn }) => {
209
230
  children: [
210
231
  /* @__PURE__ */ jsxs(Group, { align: "start", justify: "space-between", gap: "sm", mb: "sm", wrap: "nowrap", children: [
211
232
  /* @__PURE__ */ jsxs(Group, { align: "start", gap: "sm", style: { cursor: "default" }, wrap: "nowrap", children: [
212
- elementIcon2,
233
+ elementIcon$1,
213
234
  /* @__PURE__ */ jsxs(Box, { children: [
214
235
  /* @__PURE__ */ jsx(
215
236
  Text,
@@ -221,7 +242,7 @@ const ElementDetailsCard = memo(({ fqn }) => {
221
242
  children: elementModel.title
222
243
  }
223
244
  ),
224
- nodeModel.$node.notation && /* @__PURE__ */ jsx(Text, { component: "div", c: "dimmed", fz: "sm", fw: 500, lh: 1.3, lineClamp: 1, children: nodeModel.$node.notation })
245
+ notation && /* @__PURE__ */ jsx(Text, { component: "div", c: "dimmed", fz: "sm", fw: 500, lh: 1.3, lineClamp: 1, children: notation })
225
246
  ] })
226
247
  ] }),
227
248
  /* @__PURE__ */ jsx(
@@ -230,7 +251,7 @@ const ElementDetailsCard = memo(({ fqn }) => {
230
251
  size: "lg",
231
252
  onClick: (e) => {
232
253
  e.stopPropagation();
233
- overlay.close();
254
+ close();
234
255
  }
235
256
  }
236
257
  )
@@ -269,22 +290,21 @@ const ElementDetailsCard = memo(({ fqn }) => {
269
290
  children: /* @__PURE__ */ jsx(IconExternalLink, { stroke: 1.6, style: { width: "65%" } })
270
291
  }
271
292
  ),
272
- onOpenSource && /* @__PURE__ */ jsx(Tooltip, { label: "Open source", children: /* @__PURE__ */ jsx(
293
+ /* @__PURE__ */ jsx(IfEnabled, { feature: "Vscode", children: /* @__PURE__ */ jsx(Tooltip, { label: "Open source", children: /* @__PURE__ */ jsx(
273
294
  ActionIcon,
274
295
  {
275
296
  size: "lg",
276
297
  variant: "default",
277
298
  radius: "sm",
278
299
  onClick: (e) => {
279
- var _a2, _b;
280
300
  e.stopPropagation();
281
- (_b = (_a2 = diagramApi.getState()).onOpenSource) == null ? void 0 : _b.call(_a2, {
301
+ diagram.openSource({
282
302
  element: elementModel.id
283
303
  });
284
304
  },
285
305
  children: /* @__PURE__ */ jsx(IconFileSymlink, { stroke: 1.8, style: { width: "62%" } })
286
306
  }
287
- ) }),
307
+ ) }) }),
288
308
  defaultView && /* @__PURE__ */ jsx(Tooltip, { label: "Open default view", children: /* @__PURE__ */ jsx(
289
309
  ActionIcon,
290
310
  {
@@ -292,7 +312,8 @@ const ElementDetailsCard = memo(({ fqn }) => {
292
312
  variant: "default",
293
313
  radius: "sm",
294
314
  onClick: (e) => {
295
- onNavigateToCb(defaultView.id, e);
315
+ e.stopPropagation();
316
+ diagram.navigateTo(defaultView.id, fromNode ?? void 0);
296
317
  },
297
318
  children: /* @__PURE__ */ jsx(IconZoomScan, { style: { width: "70%" } })
298
319
  }
@@ -327,12 +348,12 @@ const ElementDetailsCard = memo(({ fqn }) => {
327
348
  ] }),
328
349
  elementModel.$element.metadata && /* @__PURE__ */ jsx(ElementMetata, { value: elementModel.$element.metadata })
329
350
  ] }) }) }),
330
- /* @__PURE__ */ jsx(TabsPanel, { value: "Relationships", children: activeTab === "Relationships" && /* @__PURE__ */ jsx(
351
+ /* @__PURE__ */ jsx(TabsPanel, { value: "Relationships", children: nodeModel && activeTab === "Relationships" && /* @__PURE__ */ jsx(
331
352
  TabPanelRelationships,
332
353
  {
333
354
  element: elementModel,
334
355
  node: nodeModel,
335
- currentView
356
+ currentView: diagram.currentView()
336
357
  }
337
358
  ) }),
338
359
  /* @__PURE__ */ jsx(TabsPanel, { value: "Views", children: /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "y", type: "auto", children: /* @__PURE__ */ jsxs(Stack, { gap: "lg", children: [
@@ -342,7 +363,7 @@ const ElementDetailsCard = memo(({ fqn }) => {
342
363
  ViewButton,
343
364
  {
344
365
  view,
345
- onNavigateTo: onNavigateToCb
366
+ onNavigateTo: (to) => diagram.navigateTo(to, fromNode ?? void 0)
346
367
  },
347
368
  view.id
348
369
  )) })
@@ -353,7 +374,7 @@ const ElementDetailsCard = memo(({ fqn }) => {
353
374
  ViewButton,
354
375
  {
355
376
  view,
356
- onNavigateTo: onNavigateToCb
377
+ onNavigateTo: (to) => diagram.navigateTo(to, fromNode ?? void 0)
357
378
  },
358
379
  view.id
359
380
  )) })
@@ -382,32 +403,6 @@ const ElementDetailsCard = memo(({ fqn }) => {
382
403
  );
383
404
  });
384
405
  ElementDetailsCard.displayName = "ElementDetailsCard";
385
- const ElementIcon = ({ element, viewId, renderIcon: RenderIcon }) => {
386
- if (!element.icon || element.icon === "none") {
387
- return null;
388
- }
389
- let icon = null;
390
- if (element.icon.startsWith("http://") || element.icon.startsWith("https://")) {
391
- icon = /* @__PURE__ */ jsx("img", { src: element.icon, alt: element.title });
392
- } else if (RenderIcon) {
393
- icon = /* @__PURE__ */ jsx(RenderIcon, { node: element });
394
- }
395
- if (!icon) {
396
- return null;
397
- }
398
- return /* @__PURE__ */ jsx(
399
- m.div,
400
- {
401
- layoutId: `${viewId}:element:icon:${element.id}`,
402
- className: clsx(
403
- elementIcon,
404
- "likec4-element-icon"
405
- ),
406
- "data-likec4-icon": element.icon,
407
- children: icon
408
- }
409
- );
410
- };
411
406
  const ViewButton = ({
412
407
  view,
413
408
  onNavigateTo
@@ -2,10 +2,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useTree, Alert, Tree, Box, rem, Button, Group, Text, ThemeIcon, Menu } from "@mantine/core";
3
3
  import { IconInfoCircle, IconTarget, IconZoomScan } from "@tabler/icons-react";
4
4
  import { memo, useMemo, useEffect } from "react";
5
- import { useLikeC4ElementModel } from "../../likec4model/useLikeC4Model.js";
6
- import { stopPropagation } from "../../xyflow/utils.js";
5
+ import { useCurrentViewId } from "../../hooks/useCurrentViewId.js";
6
+ import { useLikeC4Model } from "../../likec4model/useLikeC4Model.js";
7
7
  import { treeNode, treeNodeLabel, nodeLabel, instanceLabel } from "./TabPanelDeployments.css.js";
8
- import { useCurrentViewId, useDiagramStoreApi } from "../../hooks/useDiagramState.js";
8
+ import { stopPropagation } from "../../utils/xyflow.js";
9
9
  const DeploymentNodeRenderer = ({
10
10
  node
11
11
  }) => /* @__PURE__ */ jsxs(Group, { className: nodeLabel, gap: 6, align: "baseline", wrap: "nowrap", children: [
@@ -19,7 +19,6 @@ const DeployedInstanceRenderer = ({
19
19
  instance
20
20
  }) => {
21
21
  const currentViewId = useCurrentViewId();
22
- const diagramApi = useDiagramStoreApi();
23
22
  const views = [...instance.views()];
24
23
  return /* @__PURE__ */ jsxs(Group, { className: instanceLabel, gap: 4, children: [
25
24
  /* @__PURE__ */ jsx(ThemeIcon, { color: "gray", variant: "transparent", size: "xs", flex: 0, children: /* @__PURE__ */ jsx(IconTarget, { stroke: 1.2 }) }),
@@ -56,9 +55,7 @@ const DeployedInstanceRenderer = ({
56
55
  }
57
56
  },
58
57
  onClick: (e) => {
59
- var _a, _b;
60
58
  e.stopPropagation();
61
- (_b = (_a = diagramApi.getState()).onNavigateTo) == null ? void 0 : _b.call(_a, view.id);
62
59
  },
63
60
  children: view.title
64
61
  },
@@ -71,7 +68,7 @@ const DeployedInstanceRenderer = ({
71
68
  ] });
72
69
  };
73
70
  const TabPanelDeployments = memo(({ elementFqn }) => {
74
- const element = useLikeC4ElementModel(elementFqn);
71
+ const element = useLikeC4Model(true).element(elementFqn);
75
72
  const deployments = [...element.deployments()];
76
73
  const tree = useTree({
77
74
  multiple: false
@@ -2,10 +2,8 @@
2
2
  var fqn = "k4m020";
3
3
  var relationshipStat = "k4m021";
4
4
  var xyflow = "k4m022";
5
- var panelScope = "k4m023";
6
5
  export {
7
6
  fqn,
8
- panelScope,
9
7
  relationshipStat,
10
8
  xyflow
11
9
  };
@@ -4,5 +4,5 @@ type RelationshipsTabPanelProps = {
4
4
  node: LikeC4Model.Node;
5
5
  element: LikeC4Model.Element;
6
6
  };
7
- export declare function TabPanelRelationships({ currentView, node, element }: RelationshipsTabPanelProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function TabPanelRelationships({ currentView, node, element, }: RelationshipsTabPanelProps): import("react/jsx-runtime").JSX.Element;
8
8
  export {};
@@ -1,39 +1,31 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { nameFromFqn } from "@likec4/core";
3
- import { Stack, Group, Box, ThemeIcon, Text, SegmentedControl, Button, Paper } from "@mantine/core";
3
+ import { Stack, Group, Box, ThemeIcon, Text, Paper } from "@mantine/core";
4
4
  import { useId } from "@mantine/hooks";
5
- import { IconArrowRight, IconInfoCircle, IconExternalLink } from "@tabler/icons-react";
6
- import { Panel } from "@xyflow/react";
5
+ import { IconArrowRight, IconInfoCircle } from "@tabler/icons-react";
6
+ import { useActorRef } from "@xstate/react";
7
7
  import { LayoutGroup } from "framer-motion";
8
- import { useState } from "react";
8
+ import { useState, memo } from "react";
9
9
  import { unique } from "remeda";
10
- import { useOverlayDialog } from "../OverlayContext.js";
11
- import { RelationshipsXYFlow } from "../relationships-of/RelationshipsXYFlow.js";
12
- import { useLayoutedRelationships } from "../relationships-of/use-layouted-relationships.js";
13
- import { fqn, xyflow, panelScope, relationshipStat } from "./TabPanelRelationships.css.js";
14
- import { useDiagramState } from "../../hooks/useDiagramState.js";
10
+ import { relationshipsBrowserActor } from "../relationships-browser/actor.js";
11
+ import { RelationshipsBrowser } from "../relationships-browser/RelationshipsBrowser.js";
12
+ import { fqn, xyflow, relationshipStat } from "./TabPanelRelationships.css.js";
13
+ import { DiagramFeatures } from "../../context/DiagramFeatures.js";
15
14
  function TabPanelRelationships({
16
15
  currentView,
17
16
  node,
18
17
  element
19
18
  }) {
20
19
  const layoutId = useId();
21
- const enableRelationshipBrowser = useDiagramState((s) => s.enableRelationshipBrowser);
22
- const overlay = useOverlayDialog();
23
- const [scope, setScope] = useState("view");
24
- const incoming = element.incoming().map((r) => r.id).toArray();
25
- const outgoing = element.outgoing().map((r) => r.id).toArray();
20
+ useState("view");
21
+ const incoming = [...element.incoming()].map((r) => r.id);
22
+ const outgoing = [...element.outgoing()].map((r) => r.id);
26
23
  const incomingInView = unique(node.incoming().flatMap((e) => e.$edge.relations).toArray());
27
24
  const outgoingInView = unique(node.outgoing().flatMap((e) => e.$edge.relations).toArray());
28
25
  const notIncludedRelations = [
29
26
  ...incoming,
30
27
  ...outgoing
31
28
  ].filter((r) => !incomingInView.includes(r) && !outgoingInView.includes(r)).length;
32
- const {
33
- edges,
34
- nodes,
35
- bounds
36
- } = useLayoutedRelationships(element.id, currentView, scope);
37
29
  return /* @__PURE__ */ jsxs(Stack, { gap: "xs", pos: "relative", w: "100%", h: "100%", children: [
38
30
  incoming.length + outgoing.length > 0 && /* @__PURE__ */ jsxs(Group, { gap: "xs", wrap: "nowrap", align: "center", children: [
39
31
  /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Group, { gap: 8, mb: 4, wrap: "nowrap", children: [
@@ -76,51 +68,7 @@ function TabPanelRelationships({
76
68
  }
77
69
  )
78
70
  ] }),
79
- /* @__PURE__ */ jsx(Box, { className: xyflow, children: /* @__PURE__ */ jsx(LayoutGroup, { id: layoutId, children: /* @__PURE__ */ jsxs(
80
- RelationshipsXYFlow,
81
- {
82
- subjectId: element.id,
83
- bounds,
84
- nodes,
85
- edges,
86
- view: currentView,
87
- elementsSelectable: false,
88
- children: [
89
- /* @__PURE__ */ jsx(Panel, { position: "top-left", className: panelScope, children: /* @__PURE__ */ jsx(
90
- SegmentedControl,
91
- {
92
- size: "xs",
93
- withItemsBorders: false,
94
- value: scope,
95
- onChange: setScope,
96
- data: [
97
- { label: "Global", value: "global" },
98
- { label: "View", value: "view" }
99
- ]
100
- }
101
- ) }),
102
- enableRelationshipBrowser && /* @__PURE__ */ jsx(Panel, { position: "top-right", children: /* @__PURE__ */ jsx(
103
- Button,
104
- {
105
- size: "compact-sm",
106
- variant: "default",
107
- fz: "xs",
108
- fw: 500,
109
- rightSection: /* @__PURE__ */ jsx(IconExternalLink, { stroke: 1.6, style: { width: 16 } }),
110
- onClick: (e) => {
111
- e.stopPropagation();
112
- overlay.close(() => {
113
- overlay.openOverlay({
114
- relationshipsOf: element.id
115
- });
116
- });
117
- },
118
- children: "Open"
119
- }
120
- ) })
121
- ]
122
- }
123
- ) }) })
71
+ /* @__PURE__ */ jsx(Box, { className: xyflow, children: /* @__PURE__ */ jsx(LayoutGroup, { id: layoutId, children: /* @__PURE__ */ jsx(EmbeddedRelationshipsBrowser, { subjectId: element.id, currentView }) }) })
124
72
  ] });
125
73
  }
126
74
  function RelationshipsStat({
@@ -152,6 +100,29 @@ function RelationshipsStat({
152
100
  }
153
101
  );
154
102
  }
103
+ const EmbeddedRelationshipsBrowser = memo(
104
+ ({ subjectId, currentView }) => {
105
+ const actor = useActorRef(relationshipsBrowserActor, {
106
+ input: {
107
+ subject: subjectId,
108
+ scope: currentView,
109
+ closeable: false,
110
+ enableNavigationMenu: false
111
+ }
112
+ });
113
+ return /* @__PURE__ */ jsx(
114
+ DiagramFeatures,
115
+ {
116
+ overrides: {
117
+ enableRelationshipBrowser: false,
118
+ enableNavigateTo: false
119
+ },
120
+ children: /* @__PURE__ */ jsx(RelationshipsBrowser, { actorRef: actor })
121
+ }
122
+ );
123
+ },
124
+ (prev, next) => prev.subjectId === next.subjectId
125
+ );
155
126
  export {
156
127
  TabPanelRelationships
157
128
  };
@@ -17,9 +17,9 @@ export type TreeNodeData = ElementTreeNodeData | MessageNodeData;
17
17
  type TabPanelStructureProps = {
18
18
  element: LikeC4Model.Element;
19
19
  };
20
- export declare const ElementLabel: ({ element }: {
20
+ export declare const ElementLabel: ({ element, }: {
21
21
  element: LikeC4Model.Element;
22
22
  type: "ancestor" | "current" | "descedant";
23
23
  }) => import("react/jsx-runtime").JSX.Element;
24
- export declare function TabPanelStructure({ element }: TabPanelStructureProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function TabPanelStructure({ element, }: TabPanelStructureProps): import("react/jsx-runtime").JSX.Element;
25
25
  export {};
@@ -38,7 +38,7 @@ function TabPanelStructure({
38
38
  messageNode(/* @__PURE__ */ jsx(Pill, { radius: "sm", children: "no nested" }))
39
39
  );
40
40
  }
41
- let ancestor = element.ancestors().reduce((acc, parent) => ({
41
+ let ancestor = [...element.ancestors()].reduce((acc, parent) => ({
42
42
  label: /* @__PURE__ */ jsx(ElementLabel, { type: "ancestor", element: parent }),
43
43
  value: parent.id,
44
44
  element: parent,
@@ -0,0 +1,2 @@
1
+ export declare const dialog: string;
2
+ export declare const body: string;