@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,17 +1,16 @@
1
1
  import {
2
- ComputedNode,
3
- ComputedView,
4
2
  type DiagramView,
5
3
  type Element,
6
4
  type Fqn,
7
- invariant,
8
- isDeploymentView,
9
- isScopedElementView,
10
5
  type LikeC4View,
11
6
  type Link,
12
- type ViewId
7
+ ComputedNode,
8
+ ComputedView,
9
+ isDeploymentView,
10
+ isScopedElementView,
13
11
  } from '@likec4/core'
14
12
  import {
13
+ type TextProps,
15
14
  ActionIcon,
16
15
  ActionIconGroup,
17
16
  Anchor,
@@ -34,21 +33,22 @@ import {
34
33
  TabsPanel,
35
34
  TabsTab,
36
35
  Text,
37
- type TextProps,
38
36
  ThemeIcon,
39
37
  Tooltip as MantineTooltip,
40
- UnstyledButton
38
+ UnstyledButton,
41
39
  } from '@mantine/core'
42
- import { useSessionStorage, useViewportSize } from '@mantine/hooks'
40
+ import { useDebouncedCallback, useSessionStorage, useViewportSize } from '@mantine/hooks'
43
41
  import { IconCheck, IconCopy, IconExternalLink, IconFileSymlink, IconStack2, IconZoomScan } from '@tabler/icons-react'
44
42
  import clsx from 'clsx'
45
- import { m, type PanInfo, useDragControls, useMotionValue } from 'framer-motion'
46
- import { memo, type PropsWithChildren, useCallback, useEffect, useRef } from 'react'
47
- import { clamp, find, isNullish, map, only, partition, pick, pipe } from 'remeda'
48
- import { useDiagramState, useDiagramStoreApi, useXYFlow, useXYInternalNode } from '../../hooks'
43
+ import { type PanInfo, m, useDragControls, useMotionValue } from 'framer-motion'
44
+ import { type PropsWithChildren, memo, useCallback, useLayoutEffect, useRef } from 'react'
45
+ import { clamp, isNullish, map, only, partition, pipe } from 'remeda'
46
+ import { IconRenderer, IfEnabled } from '../../context'
47
+ import { useUpdateEffect } from '../../hooks'
48
+ import { useDiagram } from '../../hooks/useDiagram'
49
+ import { useDiagramContext } from '../../hooks/useDiagramContext'
49
50
  import type { ElementIconRenderer, OnNavigateTo } from '../../LikeC4Diagram.props'
50
- import { useLikeC4CurrentViewModel } from '../../likec4model'
51
- import { useOverlayDialog } from '../OverlayContext'
51
+ import { useLikeC4Model } from '../../likec4model'
52
52
  import * as css from './ElementDetailsCard.css'
53
53
  import { TabPanelDeployments } from './TabPanelDeployments'
54
54
  import { TabPanelRelationships } from './TabPanelRelationships'
@@ -57,7 +57,7 @@ import { TabPanelStructure } from './TabPanelStructure'
57
57
  const Divider = MantineDivider.withProps({
58
58
  mb: 8,
59
59
  labelPosition: 'left',
60
- variant: 'dashed'
60
+ variant: 'dashed',
61
61
  })
62
62
  const Tooltip = MantineTooltip.withProps({
63
63
  color: 'dark',
@@ -66,7 +66,7 @@ const Tooltip = MantineTooltip.withProps({
66
66
  closeDelay: 150,
67
67
  label: '',
68
68
  children: null,
69
- offset: 4
69
+ offset: 4,
70
70
  })
71
71
 
72
72
  const SmallLabel = Text.withProps({
@@ -74,14 +74,14 @@ const SmallLabel = Text.withProps({
74
74
  fz: 11,
75
75
  fw: 500,
76
76
  c: 'dimmed',
77
- lh: 1
77
+ lh: 1,
78
78
  })
79
79
 
80
80
  const PropertyLabel = Text.withProps({
81
81
  component: 'div',
82
82
  fz: 'xs',
83
83
  c: 'dimmed',
84
- className: css.propertyLabel
84
+ className: css.propertyLabel,
85
85
  })
86
86
 
87
87
  type ElementDetailsCardProps = {
@@ -94,37 +94,33 @@ const TABS = ['Properties', 'Relationships', 'Views', 'Structure', 'Deployments'
94
94
  type TabName = typeof TABS[number]
95
95
 
96
96
  export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
97
+ const {
98
+ viewId,
99
+ fromNode,
100
+ rectFromNode,
101
+ } = useDiagramContext(s => ({
102
+ viewId: s.view.id,
103
+ fromNode: s.activeElementDetails?.fromNode ?? null,
104
+ rectFromNode: s.activeElementDetails?.nodeRectScreen ?? null,
105
+ }))
97
106
  const windowSize = useViewportSize()
98
107
  const windowWidth = windowSize.width || window.innerWidth || 1200,
99
108
  windowHeight = windowSize.height || window.innerHeight || 800
100
- const xyflow = useXYFlow()
101
- const xynode = useXYInternalNode(fqn)
102
- invariant(xynode, `XYNode with id ${fqn} not found`)
103
109
 
104
- const overlay = useOverlayDialog()
105
110
  const [activeTab, setActiveTab] = useSessionStorage<TabName>({
106
111
  key: `likec4:element-details:active-tab`,
107
- defaultValue: 'Properties'
108
- })
109
- const diagramApi = useDiagramStoreApi()
110
- const viewModel = useLikeC4CurrentViewModel()
111
- const {
112
- view: currentView,
113
- renderIcon,
114
- onOpenSource
115
- } = useDiagramState(pick(['view', 'renderIcon', 'onNavigateTo', 'onOpenSource']))
116
- const diagramNode = currentView.nodes.find(n => n.id === fqn)
117
- invariant(diagramNode, `DiagramNode with fqn ${fqn} not found`)
118
- const nodeModel = viewModel.findNode(fqn)
119
- invariant(nodeModel && nodeModel.hasElement(), `NodeModel with fqn ${fqn} not found`)
120
- const elementModel = nodeModel.element
121
- const viewId = viewModel.id
122
-
123
- const elementIcon = ElementIcon({
124
- element: nodeModel.$node,
125
- viewId,
126
- renderIcon
112
+ defaultValue: 'Properties',
127
113
  })
114
+ const diagram = useDiagram()
115
+ const likec4model = useLikeC4Model(true)
116
+ const viewModel = likec4model.view(viewId)
117
+ // const currentView = diagram.currentView()
118
+
119
+ // const diagramNode = currentView.nodes.find(n => n.id === fqn)
120
+ // invariant(diagramNode, `DiagramNode with fqn ${fqn} not found`)
121
+ const nodeModel = fromNode ? viewModel.findNode(fromNode) : viewModel.findNodeWithElement(fqn)
122
+ // invariant(nodeModel && nodeModel.hasElement(), `NodeModel with fqn ${fqn} not found`)
123
+ const elementModel = viewModel.$model.element(fqn)
128
124
 
129
125
  // const incoming = elementModel.incoming().map(r => r.id).toArray()
130
126
  // const outgoing = elementModel.outgoing().map(r => r.id).toArray()
@@ -143,94 +139,121 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
143
139
  partition(view => {
144
140
  const v = view as LikeC4View
145
141
  return isScopedElementView(v) && v.viewOf === fqn
146
- })
142
+ }),
147
143
  )
148
144
 
149
- const defaultView = nodeModel.navigateTo?.$view
150
- ?? find(viewsOf, v => v.id !== viewModel.id) ?? null
151
-
152
- const defaultLink = only(nodeModel.links)
145
+ let defaultView = nodeModel?.navigateTo?.$view ?? elementModel.defaultView?.$view ?? null
146
+ if (defaultView?.id === viewId) {
147
+ defaultView = null
148
+ }
153
149
 
154
- const onNavigateToCb = useCallback((toView: ViewId, e?: React.MouseEvent): void => {
155
- e?.stopPropagation()
156
- const { onNavigateTo } = diagramApi.getState()
157
- if (!onNavigateTo) {
158
- return
159
- }
160
- overlay.close(() => {
161
- diagramApi.setState({
162
- lastOnNavigate: {
163
- fromView: viewModel.id,
164
- toView,
165
- fromNode: fqn
166
- }
167
- })
168
- onNavigateTo(toView)
169
- })
170
- }, [fqn, viewModel.id])
150
+ const defaultLink = only(elementModel.links)
171
151
  const controls = useDragControls()
172
152
 
173
- const isCompound = nodeModel.children.length > 0
174
-
175
- const fromPositon = xyflow.flowToScreenPosition({
176
- x: xynode.internals.positionAbsolute.x + diagramNode.width / 2,
177
- y: xynode.internals.positionAbsolute.y + (isCompound ? 0 : diagramNode.height / 2)
178
- })
179
-
153
+ const isCompound = (nodeModel?.$node.children?.length ?? 0) > 0
180
154
  const _width = Math.min(700, windowWidth - MIN_PADDING * 2)
181
155
  const _height = Math.min(650, windowHeight - MIN_PADDING * 2)
182
156
 
157
+ const fromPositon = rectFromNode
158
+ ? {
159
+ x: rectFromNode.x + (isCompound ? (rectFromNode.width - _width / 2) : rectFromNode.width / 2),
160
+ y: rectFromNode.y + (isCompound ? 0 : rectFromNode.height / 2),
161
+ }
162
+ : {
163
+ x: windowWidth / 2,
164
+ y: windowHeight / 2,
165
+ }
166
+
167
+ const fromScale = rectFromNode ? Math.min(rectFromNode.width / _width, rectFromNode.height / _height, 0.9) : 1
168
+
183
169
  const left = Math.round(
184
170
  clamp(fromPositon.x - _width / 2, {
185
171
  min: MIN_PADDING,
186
- max: windowWidth - _width - MIN_PADDING
187
- })
172
+ max: windowWidth - _width - MIN_PADDING,
173
+ }),
188
174
  )
189
175
  const top = Math.round(
190
176
  clamp(fromPositon.y - (isCompound ? 0 : 60), {
191
177
  min: MIN_PADDING,
192
- max: windowHeight - _height - MIN_PADDING
193
- })
178
+ max: windowHeight - _height - MIN_PADDING,
179
+ }),
194
180
  )
195
181
 
182
+ const originX = clamp((fromPositon.x - left) / _width, {
183
+ min: 0.1,
184
+ max: 0.9,
185
+ })
186
+ const originY = clamp((fromPositon.y - top) / _height, {
187
+ min: 0.1,
188
+ max: 0.9,
189
+ })
190
+
196
191
  const width = useMotionValue(_width)
197
192
  const height = useMotionValue(_height)
198
193
 
194
+ useUpdateEffect(() => {
195
+ width.set(_width)
196
+ height.set(_height)
197
+ }, [_width, _height])
198
+
199
199
  const handleDrag = useCallback((_: MouseEvent | TouchEvent | PointerEvent, info: PanInfo) => {
200
200
  width.set(Math.max(width.get() + info.delta.x, 320))
201
201
  height.set(Math.max(height.get() + info.delta.y, 300))
202
202
  }, [])
203
203
 
204
204
  const ref = useRef<HTMLDialogElement>(null)
205
- useEffect(() => {
205
+ useLayoutEffect(() => {
206
206
  ref.current?.showModal()
207
207
  }, [])
208
208
 
209
+ const diagramApi = useDiagram()
210
+ const close = useDebouncedCallback(
211
+ () => {
212
+ diagramApi.closeOverlay()
213
+ },
214
+ 50,
215
+ )
216
+
217
+ const notation = nodeModel?.$node.notation ?? null
218
+
219
+ const elementIcon = IconRenderer({
220
+ element: {
221
+ id: fqn,
222
+ title: elementModel.title,
223
+ icon: nodeModel?.icon ?? elementModel.icon,
224
+ },
225
+ className: css.elementIcon,
226
+ })
227
+
209
228
  return (
210
229
  <m.dialog
211
230
  ref={ref}
212
231
  className={css.dialog}
232
+ layoutRoot
213
233
  initial={{
214
234
  '--backdrop-blur': '0px',
215
- '--backdrop-opacity': '0%'
235
+ '--backdrop-opacity': '10%',
216
236
  }}
217
237
  animate={{
218
- '--backdrop-blur': '1px',
219
- '--backdrop-opacity': '50%'
238
+ '--backdrop-blur': '3px',
239
+ '--backdrop-opacity': '60%',
220
240
  }}
221
241
  exit={{
222
242
  '--backdrop-blur': '0px',
223
- '--backdrop-opacity': '0%'
243
+ '--backdrop-opacity': '0%',
244
+ transition: {
245
+ duration: 0.1,
246
+ },
224
247
  }}
225
248
  onClick={e => {
226
249
  if ((e.target as any)?.nodeName?.toUpperCase() === 'DIALOG') {
227
250
  e.stopPropagation()
228
- overlay.close()
251
+ close()
229
252
  }
230
253
  }}
231
254
  onClose={e => {
232
255
  e.stopPropagation()
233
- overlay.close()
256
+ close()
234
257
  }}
235
258
  >
236
259
  <RemoveScroll forwardProps>
@@ -244,43 +267,35 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
244
267
  shadow="md"
245
268
  component={m.div}
246
269
  className={css.card}
247
- layoutId={`${viewId}:element:${fqn}`}
248
- // initial={{
249
- // opacity: 1,
250
- // top,
251
- // left,
252
- // // transform: `translate(${left}px, ${top}px)`,
253
- // // translateX: left,
254
- // // translateY: top,
255
- // // width: _width,
256
- // // height: _height
257
- // }}
270
+ layoutId={fqn}
258
271
  initial={{
259
272
  top,
260
273
  left,
261
274
  width: _width,
262
275
  height: _height,
263
- opacity: 0
276
+ opacity: 0,
277
+ originX,
278
+ originY,
279
+ scale: Math.max(fromScale, 0.7),
264
280
  }}
265
281
  animate={{
266
- opacity: 1
282
+ opacity: 1,
283
+ scale: 1,
267
284
  }}
268
285
  exit={{
269
- opacity: 0
286
+ opacity: 0,
287
+ scale: 0.9,
288
+ translateY: -10,
289
+ transition: {
290
+ duration: 0.1,
291
+ },
270
292
  }}
271
293
  style={{
272
294
  // `style` prop in Mantine doesn't accept motion values
273
295
  width: width as any,
274
- height: height as any
296
+ height: height as any,
275
297
  }}
276
- onKeyDown={e => {
277
- if (e.key === 'Escape') {
278
- e.preventDefault()
279
- e.stopPropagation()
280
- overlay.close()
281
- }
282
- }}
283
- data-likec4-color={nodeModel.color}>
298
+ data-likec4-color={nodeModel?.color ?? elementModel.color}>
284
299
  <FocusTrap>
285
300
  <FocusTrapInitialFocus />
286
301
  <Box
@@ -297,9 +312,9 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
297
312
  className={css.title}>
298
313
  {elementModel.title}
299
314
  </Text>
300
- {nodeModel.$node.notation && (
315
+ {notation && (
301
316
  <Text component="div" c={'dimmed'} fz={'sm'} fw={500} lh={1.3} lineClamp={1}>
302
- {nodeModel.$node.notation}
317
+ {notation}
303
318
  </Text>
304
319
  )}
305
320
  </Box>
@@ -308,7 +323,7 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
308
323
  size={'lg'}
309
324
  onClick={e => {
310
325
  e.stopPropagation()
311
- overlay.close()
326
+ close()
312
327
  }}
313
328
  />
314
329
  </Group>
@@ -328,7 +343,7 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
328
343
  </Box>
329
344
  <ActionIconGroup
330
345
  style={{
331
- alignSelf: 'flex-end'
346
+ alignSelf: 'flex-end',
332
347
  }}>
333
348
  {defaultLink && (
334
349
  <ActionIcon
@@ -342,7 +357,7 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
342
357
  <IconExternalLink stroke={1.6} style={{ width: '65%' }} />
343
358
  </ActionIcon>
344
359
  )}
345
- {onOpenSource && (
360
+ <IfEnabled feature="Vscode">
346
361
  <Tooltip label="Open source">
347
362
  <ActionIcon
348
363
  size="lg"
@@ -350,15 +365,14 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
350
365
  radius="sm"
351
366
  onClick={e => {
352
367
  e.stopPropagation()
353
- diagramApi.getState().onOpenSource?.({
354
- element: elementModel.id
368
+ diagram.openSource({
369
+ element: elementModel.id,
355
370
  })
356
- }}
357
- >
371
+ }}>
358
372
  <IconFileSymlink stroke={1.8} style={{ width: '62%' }} />
359
373
  </ActionIcon>
360
374
  </Tooltip>
361
- )}
375
+ </IfEnabled>
362
376
  {defaultView && (
363
377
  <Tooltip label="Open default view">
364
378
  <ActionIcon
@@ -366,7 +380,8 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
366
380
  variant="default"
367
381
  radius="sm"
368
382
  onClick={e => {
369
- onNavigateToCb(defaultView.id, e)
383
+ e.stopPropagation()
384
+ diagram.navigateTo(defaultView.id, fromNode ?? undefined)
370
385
  }}>
371
386
  <IconZoomScan style={{ width: '70%' }} />
372
387
  </ActionIcon>
@@ -384,7 +399,7 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
384
399
  root: css.tabsRoot,
385
400
  list: css.tabsList,
386
401
  tab: css.tabsTab,
387
- panel: css.tabsPanel
402
+ panel: css.tabsPanel,
388
403
  }}>
389
404
  <TabsList>
390
405
  {TABS.map(tab => (
@@ -419,11 +434,11 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
419
434
  </TabsPanel>
420
435
 
421
436
  <TabsPanel value="Relationships">
422
- {activeTab === 'Relationships' && (
437
+ {nodeModel && activeTab === 'Relationships' && (
423
438
  <TabPanelRelationships
424
439
  element={elementModel}
425
440
  node={nodeModel}
426
- currentView={currentView} />
441
+ currentView={diagram.currentView()} />
427
442
  )}
428
443
  </TabsPanel>
429
444
 
@@ -438,7 +453,7 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
438
453
  <ViewButton
439
454
  key={view.id}
440
455
  view={view}
441
- onNavigateTo={onNavigateToCb}
456
+ onNavigateTo={to => diagram.navigateTo(to, fromNode ?? undefined)}
442
457
  />
443
458
  ))}
444
459
  </Stack>
@@ -452,7 +467,7 @@ export const ElementDetailsCard = memo(({ fqn }: ElementDetailsCardProps) => {
452
467
  <ViewButton
453
468
  key={view.id}
454
469
  view={view}
455
- onNavigateTo={onNavigateToCb}
470
+ onNavigateTo={to => diagram.navigateTo(to, fromNode ?? undefined)}
456
471
  />
457
472
  ))}
458
473
  </Stack>
@@ -495,7 +510,7 @@ const ElementIcon = (
495
510
  element: ComputedNode
496
511
  viewId: string
497
512
  renderIcon: ElementIconRenderer | null
498
- }
513
+ },
499
514
  ) => {
500
515
  if (!element.icon || element.icon === 'none') {
501
516
  return null
@@ -516,7 +531,7 @@ const ElementIcon = (
516
531
  layoutId={`${viewId}:element:icon:${element.id}`}
517
532
  className={clsx(
518
533
  css.elementIcon,
519
- 'likec4-element-icon'
534
+ 'likec4-element-icon',
520
535
  )}
521
536
  data-likec4-icon={element.icon}
522
537
  >
@@ -527,7 +542,7 @@ const ElementIcon = (
527
542
 
528
543
  const ViewButton = ({
529
544
  view,
530
- onNavigateTo
545
+ onNavigateTo,
531
546
  }: {
532
547
  view: ComputedView | DiagramView
533
548
  onNavigateTo: OnNavigateTo
@@ -576,7 +591,7 @@ function ElementProperty({
576
591
  fz={'md'}
577
592
  style={{
578
593
  whiteSpace: 'preserve-breaks',
579
- ...style
594
+ ...style,
580
595
  }}
581
596
  {...props}
582
597
  >
@@ -587,7 +602,7 @@ function ElementProperty({
587
602
  }
588
603
 
589
604
  function ElementLink({
590
- value
605
+ value,
591
606
  }: {
592
607
  value: Link
593
608
  }) {
@@ -635,7 +650,7 @@ function ElementLink({
635
650
  }
636
651
 
637
652
  function ElementMetata({
638
- value
653
+ value,
639
654
  }: {
640
655
  value: NonNullable<Element['metadata']>
641
656
  }) {
@@ -4,37 +4,37 @@ import { easings, mantine, transitions, whereDark } from '../../theme-vars'
4
4
 
5
5
  export const treeNode = style({})
6
6
  globalStyle(`${treeNode}[data-level='1']`, {
7
- marginBottom: rem(16)
7
+ marginBottom: rem(16),
8
8
  })
9
9
 
10
10
  export const treeNodeLabel = style({
11
11
  cursor: 'default',
12
12
  marginTop: 0,
13
- marginBottom: 0
13
+ marginBottom: 0,
14
14
  })
15
15
 
16
16
  const label = style({
17
17
  transition: transitions.fast,
18
18
  color: mantine.colors.gray[7],
19
19
  ':hover': {
20
- transitionTimingFunction: easings.out
20
+ transitionTimingFunction: easings.out,
21
21
  },
22
22
  selectors: {
23
23
  [`${whereDark} &`]: {
24
- color: mantine.colors.dark[1]
25
- }
26
- }
24
+ color: mantine.colors.dark[1],
25
+ },
26
+ },
27
27
  })
28
28
  globalStyle(`${label} > *`, {
29
- transition: transitions.fast
29
+ transition: transitions.fast,
30
30
  })
31
31
  globalStyle(`${label}:hover > :not([data-no-transform])`, {
32
32
  transitionTimingFunction: easings.out,
33
- transform: 'translateX(1px)'
33
+ transform: 'translateX(1px)',
34
34
  })
35
35
  globalStyle(`.mantine-Button-root:hover ${label} > :not([data-no-transform])`, {
36
36
  transitionTimingFunction: easings.out,
37
- transform: 'translateX(1px)'
37
+ transform: 'translateX(1px)',
38
38
  })
39
39
 
40
40
  export const nodeLabel = style([label, {}])
@@ -52,17 +52,17 @@ export const instanceLabel = style([label, {
52
52
  color: mantine.colors.gray[7],
53
53
  selectors: {
54
54
  [`${whereDark} &`]: {
55
- color: mantine.colors.gray.lightColor
56
- }
55
+ color: mantine.colors.gray.lightColor,
56
+ },
57
57
  },
58
58
  ':hover': {
59
- background: mantine.colors.gray.lightHover
60
- }
59
+ background: mantine.colors.gray.lightHover,
60
+ },
61
61
  }])
62
62
  globalStyle(`${instanceLabel} .tabler-icon`, {
63
63
  transition: transitions.fast,
64
64
  width: '90%',
65
- opacity: 0.65
65
+ opacity: 0.65,
66
66
  })
67
67
  // globalStyle(`.mantine-Button-root:hover ${instanceLabel} .tabler-icon`, {
68
68
  // opacity: 0.8