@likec4/diagram 1.19.1 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.css.js +1 -5
  3. package/dist/LikeC4Diagram.d.ts +1 -4
  4. package/dist/LikeC4Diagram.js +102 -147
  5. package/dist/LikeC4Diagram.props.d.ts +10 -16
  6. package/dist/LikeC4Search.js +7 -15
  7. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  8. package/dist/base/Background.d.ts +7 -0
  9. package/dist/{xyflow/XYFlowBackground.js → base/Background.js} +5 -6
  10. package/dist/base/BaseXYFlow.d.ts +14 -0
  11. package/dist/base/BaseXYFlow.js +146 -0
  12. package/dist/base/example/RelationshipsBrowser.d.ts +6 -0
  13. package/dist/base/example/_types.d.ts +20 -0
  14. package/dist/base/example/custom.d.ts +71 -0
  15. package/dist/base/example/useViewToNodesEdges.d.ts +6 -0
  16. package/dist/base/index.d.ts +2 -0
  17. package/dist/base/primitives/NodeHandles.d.ts +4 -0
  18. package/dist/base/primitives/NodeHandles.js +14 -0
  19. package/dist/base/primitives/compound/CompoundActionButton.css.d.ts +3 -0
  20. package/dist/base/primitives/compound/CompoundActionButton.css.js +9 -0
  21. package/dist/base/primitives/compound/CompoundActionButton.d.ts +7 -0
  22. package/dist/base/primitives/compound/CompoundActionButton.js +48 -0
  23. package/dist/base/primitives/compound/CompoundDetailsButton.css.d.ts +3 -0
  24. package/dist/base/primitives/compound/CompoundDetailsButton.css.js +9 -0
  25. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +7 -0
  26. package/dist/base/primitives/compound/CompoundDetailsButton.js +50 -0
  27. package/dist/base/primitives/compound/CompoundNodeContainer.css.d.ts +9 -0
  28. package/dist/base/primitives/compound/CompoundNodeContainer.css.js +17 -0
  29. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +26 -0
  30. package/dist/base/primitives/compound/CompoundNodeContainer.js +86 -0
  31. package/dist/base/primitives/compound/CompoundTitle.css.d.ts +2 -0
  32. package/dist/base/primitives/compound/CompoundTitle.css.js +7 -0
  33. package/dist/base/primitives/compound/CompoundTitle.d.ts +6 -0
  34. package/dist/base/primitives/compound/CompoundTitle.js +20 -0
  35. package/dist/base/primitives/customEdge.d.ts +41 -0
  36. package/dist/base/primitives/customEdge.js +13 -0
  37. package/dist/base/primitives/customNode.d.ts +7 -0
  38. package/dist/base/primitives/customNode.js +10 -0
  39. package/dist/base/primitives/edge/EdgeActionButton.d.ts +7 -0
  40. package/dist/base/primitives/edge/EdgeActionButton.js +24 -0
  41. package/dist/base/primitives/edge/EdgeContainer.d.ts +10 -0
  42. package/dist/base/primitives/edge/EdgeContainer.js +35 -0
  43. package/dist/{xyflow/edges/edges.css.d.ts → base/primitives/edge/EdgeLabel.css.d.ts} +5 -9
  44. package/dist/base/primitives/edge/EdgeLabel.css.js +25 -0
  45. package/dist/base/primitives/edge/EdgeLabel.d.ts +51 -0
  46. package/dist/base/primitives/edge/EdgeLabel.js +90 -0
  47. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.d.ts +2 -0
  48. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.js +29 -1
  49. package/dist/base/primitives/edge/EdgePath.d.ts +44 -0
  50. package/dist/base/primitives/edge/EdgePath.js +77 -0
  51. package/dist/base/primitives/edge/edge.css.d.ts +6 -0
  52. package/dist/base/primitives/edge/edge.css.js +14 -0
  53. package/dist/base/primitives/element/ElementActionButtons.css.d.ts +3 -0
  54. package/dist/base/primitives/element/ElementActionButtons.css.js +9 -0
  55. package/dist/base/primitives/element/ElementActionButtons.d.ts +13 -0
  56. package/dist/base/primitives/element/ElementActionButtons.js +62 -0
  57. package/dist/base/primitives/element/ElementDetailsButton.css.d.ts +3 -0
  58. package/dist/base/primitives/element/ElementDetailsButton.css.js +9 -0
  59. package/dist/base/primitives/element/ElementDetailsButton.d.ts +7 -0
  60. package/dist/base/primitives/element/ElementDetailsButton.js +54 -0
  61. package/dist/base/primitives/element/ElementNodeContainer.css.d.ts +3 -0
  62. package/dist/base/primitives/element/ElementNodeContainer.css.js +7 -0
  63. package/dist/base/primitives/element/ElementNodeContainer.d.ts +26 -0
  64. package/dist/base/primitives/element/ElementNodeContainer.js +60 -0
  65. package/dist/base/primitives/element/ElementShape.css.d.ts +6 -0
  66. package/dist/base/primitives/element/ElementShape.css.js +14 -0
  67. package/dist/base/primitives/element/ElementShape.d.ts +28 -0
  68. package/dist/{xyflow/nodes/element/ElementShapeSvg.js → base/primitives/element/ElementShape.js} +23 -7
  69. package/dist/base/primitives/element/ElementTitle.css.d.ts +8 -0
  70. package/dist/base/primitives/element/ElementTitle.css.js +19 -0
  71. package/dist/base/primitives/element/ElementTitle.d.ts +10 -0
  72. package/dist/base/primitives/element/ElementTitle.js +66 -0
  73. package/dist/base/primitives/index.d.ts +17 -0
  74. package/dist/base/types.d.ts +90 -0
  75. package/dist/base/types.js +54 -0
  76. package/dist/base/updateEdges.d.ts +3 -0
  77. package/dist/base/updateEdges.js +31 -0
  78. package/dist/base/updateNodes.d.ts +3 -0
  79. package/dist/base/updateNodes.js +36 -0
  80. package/dist/base/xyflowMachine.d.ts +212 -0
  81. package/dist/context/DiagramEventHandlers.d.ts +10 -0
  82. package/dist/context/DiagramEventHandlers.js +49 -0
  83. package/dist/context/DiagramFeatures.d.ts +31 -0
  84. package/dist/context/DiagramFeatures.js +140 -0
  85. package/dist/{ui → context}/FramerMotionConfig.js +2 -4
  86. package/dist/context/IconRenderer.d.ts +11 -0
  87. package/dist/{xyflow/nodes/shared/ElementIcon.js → context/IconRenderer.js} +14 -14
  88. package/dist/context/RootContainer.d.ts +9 -0
  89. package/dist/context/RootContainer.js +20 -0
  90. package/dist/context/index.d.ts +7 -0
  91. package/dist/globals.css.js +0 -87
  92. package/dist/hooks/index.d.ts +7 -5
  93. package/dist/hooks/useCurrentViewId.d.ts +2 -0
  94. package/dist/hooks/useCurrentViewId.js +8 -0
  95. package/dist/hooks/useDiagram.d.ts +10725 -0
  96. package/dist/hooks/useDiagram.js +119 -0
  97. package/dist/hooks/useDiagramActor.d.ts +5 -0
  98. package/dist/hooks/useDiagramActor.js +21 -0
  99. package/dist/hooks/useDiagramContext.d.ts +3 -0
  100. package/dist/hooks/useDiagramContext.js +10 -0
  101. package/dist/hooks/useMantinePortalProps.js +2 -2
  102. package/dist/hooks/useXYFlow.d.ts +195 -37
  103. package/dist/hooks/useXYFlow.js +4 -6
  104. package/dist/index.d.ts +3 -2
  105. package/dist/index.js +5 -6
  106. package/dist/likec4diagram/DiagramActor.d.ts +7 -0
  107. package/dist/likec4diagram/DiagramActor.js +71 -0
  108. package/dist/likec4diagram/DiagramUI.d.ts +2 -0
  109. package/dist/likec4diagram/DiagramUI.js +22 -0
  110. package/dist/likec4diagram/XYFlow.d.ts +6 -0
  111. package/dist/likec4diagram/XYFlow.js +122 -0
  112. package/dist/likec4diagram/custom/edges/NotePopover.css.d.ts +2 -0
  113. package/dist/likec4diagram/custom/edges/NotePopover.css.js +7 -0
  114. package/dist/likec4diagram/custom/edges/NotePopover.d.ts +4 -0
  115. package/dist/likec4diagram/custom/edges/NotePopover.js +101 -0
  116. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +55 -0
  117. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +307 -0
  118. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.js +4 -4
  119. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.d.ts +5 -5
  120. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.js +51 -53
  121. package/dist/likec4diagram/custom/edges/edges.css.d.ts +2 -0
  122. package/dist/likec4diagram/custom/edges/edges.css.js +7 -0
  123. package/dist/likec4diagram/custom/edges/utils.d.ts +22 -0
  124. package/dist/likec4diagram/custom/edges/utils.js +25 -0
  125. package/dist/likec4diagram/custom/index.d.ts +57 -0
  126. package/dist/likec4diagram/custom/index.js +7 -0
  127. package/dist/likec4diagram/custom/nodes/CompoundActions.d.ts +5 -0
  128. package/dist/likec4diagram/custom/nodes/CompoundActions.js +25 -0
  129. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +7 -0
  130. package/dist/likec4diagram/custom/nodes/ElementActions.js +69 -0
  131. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +10 -0
  132. package/dist/likec4diagram/custom/nodes/nodeTypes.js +94 -0
  133. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +21 -0
  134. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +159 -0
  135. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.d.ts +7 -0
  136. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +128 -0
  137. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.d.ts +7 -0
  138. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +149 -0
  139. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +8 -0
  140. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +66 -0
  141. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +40 -0
  142. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +131 -0
  143. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.d.ts +1 -0
  144. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +5 -0
  145. package/dist/likec4diagram/state/actorContext.d.ts +50849 -0
  146. package/dist/likec4diagram/state/actorContext.js +12 -0
  147. package/dist/{state → likec4diagram/state}/aligners.d.ts +4 -1
  148. package/dist/{state → likec4diagram/state}/aligners.js +31 -5
  149. package/dist/likec4diagram/state/assign.d.ts +18 -0
  150. package/dist/likec4diagram/state/assign.js +343 -0
  151. package/dist/likec4diagram/state/hotkeyActor.d.ts +5 -0
  152. package/dist/likec4diagram/state/hotkeyActor.js +18 -0
  153. package/dist/likec4diagram/state/inspector.d.ts +5 -0
  154. package/dist/likec4diagram/state/machine.d.ts +10751 -0
  155. package/dist/likec4diagram/state/machine.js +783 -0
  156. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +113 -0
  157. package/dist/likec4diagram/state/syncManualLayoutActor.js +178 -0
  158. package/dist/likec4diagram/state/utils.d.ts +8 -0
  159. package/dist/likec4diagram/state/utils.js +48 -0
  160. package/dist/likec4diagram/types.d.ts +74 -0
  161. package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.js +11 -10
  162. package/dist/likec4diagram/ui/controls/Controls.d.ts +2 -0
  163. package/dist/likec4diagram/ui/controls/Controls.js +102 -0
  164. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.d.ts +2 -0
  165. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +43 -0
  166. package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.js +11 -11
  167. package/dist/likec4diagram/ui/controls/NavigationButtons.d.ts +1 -0
  168. package/dist/likec4diagram/ui/controls/NavigationButtons.js +92 -0
  169. package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.js +2 -1
  170. package/dist/{ui/top-left → likec4diagram/ui/controls}/styles.css.d.ts +1 -1
  171. package/dist/likec4diagram/ui/controls/styles.css.js +17 -0
  172. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.js +11 -0
  173. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.d.ts +1 -0
  174. package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.js +3 -3
  175. package/dist/likec4diagram/ui/diagram-title/Link.d.ts +4 -0
  176. package/dist/likec4diagram/ui/index.d.ts +2 -0
  177. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +13 -0
  178. package/dist/likec4diagram/ui/notation/NotationPanel.d.ts +2 -0
  179. package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.js +23 -31
  180. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.js +4 -4
  181. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.js +19 -44
  182. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.d.ts +11 -6
  183. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.js +17 -12
  184. package/dist/likec4diagram/useViewToNodesEdges.d.ts +11 -0
  185. package/dist/likec4diagram/useViewToNodesEdges.js +245 -0
  186. package/dist/likec4model/index.d.ts +1 -1
  187. package/dist/likec4model/useLikeC4Model.d.ts +1 -11
  188. package/dist/likec4model/useLikeC4Model.js +1 -39
  189. package/dist/overlays/Overlays.js +61 -105
  190. package/dist/overlays/element-details/ElementDetailsCard.js +111 -116
  191. package/dist/overlays/element-details/TabPanelDeployments.js +4 -7
  192. package/dist/overlays/element-details/TabPanelRelationships.css.js +0 -2
  193. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  194. package/dist/overlays/element-details/TabPanelRelationships.js +35 -64
  195. package/dist/overlays/element-details/TabPanelStructure.d.ts +2 -2
  196. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  197. package/dist/overlays/overlay/Overlay.css.d.ts +2 -0
  198. package/dist/overlays/overlay/Overlay.css.js +93 -0
  199. package/dist/overlays/overlay/Overlay.d.ts +8 -0
  200. package/dist/overlays/overlay/Overlay.js +86 -0
  201. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +5 -0
  202. package/dist/overlays/relationship-details/RelationshipDetails.js +189 -0
  203. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.css.d.ts +1 -0
  204. package/dist/overlays/relationship-details/SelectEdge.css.js +17 -0
  205. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.d.ts +1 -1
  206. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.js +8 -8
  207. package/dist/overlays/relationship-details/_types.d.ts +36 -0
  208. package/dist/overlays/relationship-details/actor.d.ts +41 -0
  209. package/dist/overlays/relationship-details/actor.js +113 -0
  210. package/dist/overlays/relationship-details/custom/ElementActions.d.ts +5 -0
  211. package/dist/overlays/relationship-details/custom/ElementActions.js +33 -0
  212. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +49 -0
  213. package/dist/overlays/relationship-details/custom/edgeTypes.js +51 -0
  214. package/dist/overlays/relationship-details/custom/index.d.ts +2 -0
  215. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +39 -0
  216. package/dist/overlays/relationship-details/custom/nodeTypes.js +89 -0
  217. package/dist/overlays/relationship-details/custom/styles.css.d.ts +1 -0
  218. package/dist/overlays/relationship-details/hooks.d.ts +59 -0
  219. package/dist/overlays/relationship-details/hooks.js +46 -0
  220. package/dist/overlays/{edge-details/use-layouted-edge-details.d.ts → relationship-details/useLayoutedDetails.d.ts} +4 -6
  221. package/dist/overlays/{edge-details/use-layouted-edge-details.js → relationship-details/useLayoutedDetails.js} +68 -64
  222. package/dist/overlays/relationships-browser/-useRelationshipsView.d.ts +39 -0
  223. package/dist/overlays/relationships-browser/-useRelationshipsView.js +488 -0
  224. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +5 -0
  225. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +209 -0
  226. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.css.d.ts +1 -0
  227. package/dist/overlays/relationships-browser/SelectElement.css.js +9 -0
  228. package/dist/overlays/relationships-browser/SelectElement.d.ts +7 -0
  229. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.js +11 -7
  230. package/dist/overlays/relationships-browser/_types.d.ts +40 -0
  231. package/dist/overlays/relationships-browser/actor.d.ts +66 -0
  232. package/dist/overlays/relationships-browser/actor.js +159 -0
  233. package/dist/overlays/relationships-browser/custom/ElementActions.d.ts +5 -0
  234. package/dist/overlays/relationships-browser/custom/ElementActions.js +43 -0
  235. package/dist/overlays/relationships-browser/custom/EmptyNode.d.ts +5 -0
  236. package/dist/overlays/{relationships-of/xyflow → relationships-browser/custom}/EmptyNode.js +1 -3
  237. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +46 -0
  238. package/dist/overlays/relationships-browser/custom/edgeTypes.js +51 -0
  239. package/dist/overlays/relationships-browser/custom/index.d.ts +2 -0
  240. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +45 -0
  241. package/dist/overlays/relationships-browser/custom/nodeTypes.js +93 -0
  242. package/dist/overlays/relationships-browser/custom/styles.css.d.ts +1 -0
  243. package/dist/overlays/relationships-browser/custom/styles.css.js +5 -0
  244. package/dist/overlays/relationships-browser/hooks.d.ts +62 -0
  245. package/dist/overlays/relationships-browser/hooks.js +46 -0
  246. package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +10 -0
  247. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +160 -0
  248. package/dist/style.css +1 -1
  249. package/dist/theme-vars.css.js +1 -0
  250. package/dist/utils/index.d.ts +4 -0
  251. package/dist/{xyflow/utils.d.ts → utils/xyflow.d.ts} +4 -4
  252. package/dist/{xyflow/utils.js → utils/xyflow.js} +14 -20
  253. package/package.json +24 -21
  254. package/src/LikeC4Diagram.css.ts +21 -15
  255. package/src/LikeC4Diagram.props.ts +14 -21
  256. package/src/LikeC4Diagram.tsx +105 -150
  257. package/src/LikeC4Search.tsx +21 -28
  258. package/src/StaticLikeC4Diagram.tsx +0 -1
  259. package/src/{xyflow/XYFlowBackground.tsx → base/Background.tsx} +8 -8
  260. package/src/base/BaseXYFlow.tsx +200 -0
  261. package/src/{xyflow → base}/const.ts +1 -1
  262. package/src/base/example/RelationshipsBrowser.tsx +62 -0
  263. package/src/base/example/_types.ts +71 -0
  264. package/src/base/example/custom.tsx +58 -0
  265. package/src/base/example/useViewToNodesEdges.ts +193 -0
  266. package/src/base/index.ts +10 -0
  267. package/src/base/primitives/NodeHandles.tsx +18 -0
  268. package/src/base/primitives/compound/CompoundActionButton.css.ts +55 -0
  269. package/src/base/primitives/compound/CompoundActionButton.tsx +52 -0
  270. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +56 -0
  271. package/src/base/primitives/compound/CompoundDetailsButton.tsx +54 -0
  272. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +161 -0
  273. package/src/base/primitives/compound/CompoundNodeContainer.tsx +95 -0
  274. package/src/base/primitives/compound/CompoundTitle.css.ts +43 -0
  275. package/src/base/primitives/compound/CompoundTitle.tsx +29 -0
  276. package/src/base/primitives/customEdge.ts +32 -0
  277. package/src/base/primitives/customNode.ts +21 -0
  278. package/src/base/primitives/edge/EdgeActionButton.tsx +27 -0
  279. package/src/base/primitives/edge/EdgeContainer.tsx +48 -0
  280. package/src/base/primitives/edge/EdgeLabel.css.ts +196 -0
  281. package/src/base/primitives/edge/EdgeLabel.tsx +136 -0
  282. package/src/{xyflow → base/primitives/edge}/EdgeMarkers.tsx +29 -1
  283. package/src/base/primitives/edge/EdgePath.tsx +89 -0
  284. package/src/base/primitives/edge/edge.css.ts +122 -0
  285. package/src/base/primitives/element/ElementActionButtons.css.ts +48 -0
  286. package/src/base/primitives/element/ElementActionButtons.tsx +73 -0
  287. package/src/base/primitives/element/ElementDetailsButton.css.ts +54 -0
  288. package/src/base/primitives/element/ElementDetailsButton.tsx +59 -0
  289. package/src/base/primitives/element/ElementNodeContainer.css.ts +47 -0
  290. package/src/base/primitives/element/ElementNodeContainer.tsx +72 -0
  291. package/src/base/primitives/element/ElementShape.css.ts +134 -0
  292. package/src/{xyflow/nodes/element/ElementShapeSvg.tsx → base/primitives/element/ElementShape.tsx} +64 -19
  293. package/src/base/primitives/element/ElementTitle.css.ts +156 -0
  294. package/src/base/primitives/element/ElementTitle.tsx +76 -0
  295. package/src/base/primitives/index.ts +17 -0
  296. package/src/base/types.ts +169 -0
  297. package/src/base/updateEdges.ts +40 -0
  298. package/src/base/updateNodes.ts +46 -0
  299. package/src/base/xyflowMachine.ts +75 -0
  300. package/src/context/DiagramEventHandlers.tsx +53 -0
  301. package/src/context/DiagramFeatures.tsx +162 -0
  302. package/src/{ui → context}/FramerMotionConfig.tsx +2 -6
  303. package/src/context/IconRenderer.tsx +45 -0
  304. package/src/context/RootContainer.tsx +31 -0
  305. package/src/context/index.ts +14 -0
  306. package/src/globals.css.ts +32 -32
  307. package/src/hooks/index.ts +7 -5
  308. package/src/hooks/useCurrentViewId.ts +8 -0
  309. package/src/hooks/useDiagram.ts +129 -0
  310. package/src/hooks/useDiagramActor.ts +25 -0
  311. package/src/hooks/useDiagramContext.ts +11 -0
  312. package/src/hooks/useMantinePortalProps.ts +2 -2
  313. package/src/hooks/useXYFlow.ts +12 -38
  314. package/src/index.ts +3 -7
  315. package/src/likec4diagram/DiagramActor.tsx +79 -0
  316. package/src/likec4diagram/DiagramUI.tsx +28 -0
  317. package/src/likec4diagram/XYFlow.tsx +137 -0
  318. package/src/likec4diagram/custom/edges/NotePopover.css.ts +27 -0
  319. package/src/likec4diagram/custom/edges/NotePopover.tsx +96 -0
  320. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +355 -0
  321. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.ts +7 -7
  322. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.tsx +91 -70
  323. package/src/likec4diagram/custom/edges/edges.css.ts +39 -0
  324. package/src/likec4diagram/custom/edges/utils.ts +126 -0
  325. package/src/likec4diagram/custom/index.tsx +8 -0
  326. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +27 -0
  327. package/src/likec4diagram/custom/nodes/ElementActions.tsx +74 -0
  328. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +107 -0
  329. package/src/likec4diagram/custom/nodes/toolbar/ColorButton.tsx +175 -0
  330. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +122 -0
  331. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +140 -0
  332. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +77 -0
  333. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +143 -0
  334. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +9 -0
  335. package/src/likec4diagram/state/actorContext.ts +8 -0
  336. package/src/{state → likec4diagram/state}/aligners.ts +67 -40
  337. package/src/likec4diagram/state/assign.ts +384 -0
  338. package/src/likec4diagram/state/hotkeyActor.ts +20 -0
  339. package/src/likec4diagram/state/inspector.ts +23 -0
  340. package/src/likec4diagram/state/machine.ts +946 -0
  341. package/src/likec4diagram/state/syncManualLayoutActor.ts +219 -0
  342. package/src/likec4diagram/state/utils.ts +52 -0
  343. package/src/likec4diagram/types.ts +144 -0
  344. package/src/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.tsx +32 -28
  345. package/src/likec4diagram/ui/controls/Controls.tsx +107 -0
  346. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +46 -0
  347. package/src/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.tsx +16 -16
  348. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +83 -0
  349. package/src/{ui/top-left → likec4diagram/ui/controls}/_shared.ts +4 -3
  350. package/src/{ui/top-left → likec4diagram/ui/controls}/styles.css.ts +17 -17
  351. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.ts +11 -11
  352. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.tsx +6 -5
  353. package/src/likec4diagram/ui/diagram-title/Link.tsx +40 -0
  354. package/src/likec4diagram/ui/index.ts +2 -0
  355. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.css.ts +18 -18
  356. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.tsx +44 -44
  357. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.ts +16 -16
  358. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.tsx +29 -49
  359. package/src/{xyflow → likec4diagram}/useLayoutConstraints.ts +54 -43
  360. package/src/likec4diagram/useViewToNodesEdges.ts +297 -0
  361. package/src/likec4model/index.ts +0 -6
  362. package/src/likec4model/useLikeC4Model.ts +1 -43
  363. package/src/overlays/Overlays.tsx +201 -147
  364. package/src/overlays/element-details/ElementDetailsCard.css.ts +58 -58
  365. package/src/overlays/element-details/ElementDetailsCard.tsx +143 -128
  366. package/src/overlays/element-details/TabPanelDeployments.css.ts +14 -14
  367. package/src/overlays/element-details/TabPanelDeployments.tsx +22 -22
  368. package/src/overlays/element-details/TabPanelRelationships.css.ts +19 -19
  369. package/src/overlays/element-details/TabPanelRelationships.tsx +45 -28
  370. package/src/overlays/element-details/TabPanelStructure.css.ts +7 -7
  371. package/src/overlays/element-details/TabPanelStructure.tsx +11 -11
  372. package/src/overlays/overlay/Overlay.css.ts +73 -0
  373. package/src/overlays/overlay/Overlay.tsx +99 -0
  374. package/src/overlays/relationship-details/RelationshipDetails.tsx +234 -0
  375. package/src/overlays/{edge-details → relationship-details}/SelectEdge.css.ts +20 -13
  376. package/src/overlays/{edge-details → relationship-details}/SelectEdge.tsx +14 -14
  377. package/src/overlays/relationship-details/_types.ts +73 -0
  378. package/src/overlays/relationship-details/actor.ts +162 -0
  379. package/src/overlays/relationship-details/custom/ElementActions.tsx +45 -0
  380. package/src/overlays/relationship-details/custom/edgeTypes.tsx +49 -0
  381. package/src/overlays/relationship-details/custom/index.tsx +2 -0
  382. package/src/overlays/relationship-details/custom/nodeTypes.tsx +108 -0
  383. package/src/overlays/relationship-details/custom/styles.css.ts +13 -0
  384. package/src/overlays/relationship-details/hooks.ts +48 -0
  385. package/src/overlays/{edge-details/use-layouted-edge-details.ts → relationship-details/useLayoutedDetails.ts} +128 -114
  386. package/src/overlays/relationships-browser/-useRelationshipsView.ts +642 -0
  387. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +247 -0
  388. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.css.ts +12 -5
  389. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.tsx +19 -17
  390. package/src/overlays/relationships-browser/_types.ts +89 -0
  391. package/src/overlays/relationships-browser/actor.ts +224 -0
  392. package/src/overlays/relationships-browser/custom/ElementActions.tsx +44 -0
  393. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +18 -0
  394. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +49 -0
  395. package/src/overlays/relationships-browser/custom/index.tsx +2 -0
  396. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +109 -0
  397. package/src/overlays/relationships-browser/custom/styles.css.ts +13 -0
  398. package/src/overlays/relationships-browser/hooks.ts +48 -0
  399. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +209 -0
  400. package/src/utils/index.ts +15 -0
  401. package/src/{xyflow/utils.ts → utils/xyflow.ts} +22 -8
  402. package/dist/_virtual/_commonjsHelpers.js +0 -6
  403. package/dist/controls/Text.d.ts +0 -2
  404. package/dist/controls/Text.js +0 -7
  405. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +0 -1
  406. package/dist/controls/action-button-bar/ActionButtonBar.css.js +0 -5
  407. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +0 -9
  408. package/dist/controls/action-button-bar/ActionButtonBar.js +0 -100
  409. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +0 -10
  410. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +0 -9
  411. package/dist/controls/action-buttons/ActionButton.css.d.ts +0 -1
  412. package/dist/controls/action-buttons/ActionButton.css.js +0 -5
  413. package/dist/controls/action-buttons/ActionButton.d.ts +0 -9
  414. package/dist/controls/action-buttons/ActionButton.js +0 -66
  415. package/dist/controls/action-buttons/ActionButtons.d.ts +0 -12
  416. package/dist/controls/action-buttons/ActionButtons.js +0 -99
  417. package/dist/hooks/useDiagramState.d.ts +0 -6
  418. package/dist/hooks/useDiagramState.js +0 -27
  419. package/dist/overlays/OverlayContext.d.ts +0 -10
  420. package/dist/overlays/OverlayContext.js +0 -9
  421. package/dist/overlays/Overlays.css.d.ts +0 -3
  422. package/dist/overlays/Overlays.css.js +0 -7
  423. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +0 -5
  424. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +0 -185
  425. package/dist/overlays/edge-details/SelectEdge.css.js +0 -17
  426. package/dist/overlays/edge-details/_types.d.ts +0 -14
  427. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +0 -5
  428. package/dist/overlays/edge-details/xyflow/CompoundNode.js +0 -76
  429. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +0 -5
  430. package/dist/overlays/edge-details/xyflow/ElementNode.js +0 -159
  431. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +0 -3
  432. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +0 -84
  433. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +0 -9
  434. package/dist/overlays/edge-details/xyflow/styles.css.js +0 -21
  435. package/dist/overlays/index.d.ts +0 -1
  436. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +0 -5
  437. package/dist/overlays/relationships-of/RelationshipsOverlay.js +0 -193
  438. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +0 -19
  439. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +0 -290
  440. package/dist/overlays/relationships-of/SelectElement.css.js +0 -7
  441. package/dist/overlays/relationships-of/SelectElement.d.ts +0 -7
  442. package/dist/overlays/relationships-of/_types.d.ts +0 -28
  443. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +0 -22
  444. package/dist/overlays/relationships-of/use-layouted-relationships.js +0 -496
  445. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +0 -6
  446. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +0 -120
  447. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +0 -6
  448. package/dist/overlays/relationships-of/xyflow/ElementNode.js +0 -194
  449. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +0 -5
  450. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +0 -3
  451. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +0 -123
  452. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +0 -14
  453. package/dist/overlays/relationships-of/xyflow/styles.css.js +0 -24
  454. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +0 -4
  455. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +0 -12
  456. package/dist/overlays/shared/xyflow/_types.d.ts +0 -77
  457. package/dist/state/DiagramContext.d.ts +0 -1609
  458. package/dist/state/DiagramContext.js +0 -101
  459. package/dist/state/diagram-to-xyflow.d.ts +0 -11
  460. package/dist/state/diagram-to-xyflow.js +0 -113
  461. package/dist/state/diagramStore.d.ts +0 -1705
  462. package/dist/state/diagramStore.js +0 -808
  463. package/dist/state/diagramStore.layout.d.ts +0 -4
  464. package/dist/state/diagramStore.layout.js +0 -56
  465. package/dist/ui/DiagramTitlePanel.css.js +0 -11
  466. package/dist/ui/DiagramTitlePanel.d.ts +0 -1
  467. package/dist/ui/notation/NotationPanel.css.js +0 -16
  468. package/dist/ui/notation/NotationPanel.d.ts +0 -1
  469. package/dist/ui/top-left/TopLeftPanel.d.ts +0 -4
  470. package/dist/ui/top-left/TopLeftPanel.js +0 -211
  471. package/dist/ui/top-left/styles.css.js +0 -17
  472. package/dist/xyflow/FitviewOnDiagramChange.d.ts +0 -4
  473. package/dist/xyflow/FitviewOnDiagramChange.js +0 -72
  474. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +0 -1
  475. package/dist/xyflow/SelectEdgesOnNodeFocus.js +0 -96
  476. package/dist/xyflow/XYFlow.d.ts +0 -8
  477. package/dist/xyflow/XYFlow.js +0 -145
  478. package/dist/xyflow/XYFlowBackground.d.ts +0 -10
  479. package/dist/xyflow/XYFlowInner.d.ts +0 -8
  480. package/dist/xyflow/XYFlowInner.js +0 -41
  481. package/dist/xyflow/edges/EdgeLabel.d.ts +0 -7
  482. package/dist/xyflow/edges/EdgeLabel.js +0 -160
  483. package/dist/xyflow/edges/RelationshipEdge.d.ts +0 -6
  484. package/dist/xyflow/edges/RelationshipEdge.js +0 -443
  485. package/dist/xyflow/edges/edges.css.js +0 -37
  486. package/dist/xyflow/edges/utils.d.ts +0 -16
  487. package/dist/xyflow/edges/utils.js +0 -24
  488. package/dist/xyflow/nodes/AnimateVariants.d.ts +0 -1313
  489. package/dist/xyflow/nodes/AnimateVariants.js +0 -123
  490. package/dist/xyflow/nodes/Node.css.d.ts +0 -3
  491. package/dist/xyflow/nodes/Node.css.js +0 -9
  492. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -14
  493. package/dist/xyflow/nodes/compound/CompoundNode.css.js +0 -27
  494. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -6
  495. package/dist/xyflow/nodes/compound/CompoundNode.js +0 -216
  496. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  497. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -3
  498. package/dist/xyflow/nodes/element/ElementLink.d.ts +0 -6
  499. package/dist/xyflow/nodes/element/ElementNode.d.ts +0 -6
  500. package/dist/xyflow/nodes/element/ElementNode.js +0 -190
  501. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +0 -17
  502. package/dist/xyflow/nodes/element/element.css.d.ts +0 -18
  503. package/dist/xyflow/nodes/element/element.css.js +0 -31
  504. package/dist/xyflow/nodes/element/index.d.ts +0 -1
  505. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +0 -8
  506. package/dist/xyflow/nodes/shared/Toolbar.d.ts +0 -9
  507. package/dist/xyflow/nodes/shared/Toolbar.js +0 -436
  508. package/dist/xyflow/types.d.ts +0 -36
  509. package/dist/xyflow/useXYFlowEvents.d.ts +0 -160
  510. package/dist/xyflow/useXYFlowEvents.js +0 -275
  511. package/src/controls/Text.ts +0 -5
  512. package/src/controls/action-button-bar/ActionButtonBar.css.ts +0 -13
  513. package/src/controls/action-button-bar/ActionButtonBar.tsx +0 -138
  514. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +0 -13
  515. package/src/controls/action-buttons/ActionButton.css.ts +0 -29
  516. package/src/controls/action-buttons/ActionButton.tsx +0 -66
  517. package/src/controls/action-buttons/ActionButtons.tsx +0 -138
  518. package/src/hooks/useDiagramState.ts +0 -36
  519. package/src/overlays/OverlayContext.tsx +0 -11
  520. package/src/overlays/Overlays.css.ts +0 -136
  521. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +0 -255
  522. package/src/overlays/edge-details/_types.ts +0 -18
  523. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +0 -72
  524. package/src/overlays/edge-details/xyflow/ElementNode.tsx +0 -152
  525. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +0 -85
  526. package/src/overlays/edge-details/xyflow/styles.css.ts +0 -144
  527. package/src/overlays/index.tsx +0 -1
  528. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +0 -185
  529. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +0 -378
  530. package/src/overlays/relationships-of/_types.ts +0 -40
  531. package/src/overlays/relationships-of/use-layouted-relationships.ts +0 -699
  532. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +0 -124
  533. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +0 -194
  534. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +0 -19
  535. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +0 -127
  536. package/src/overlays/relationships-of/xyflow/styles.css.ts +0 -214
  537. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +0 -60
  538. package/src/overlays/shared/xyflow/_types.ts +0 -87
  539. package/src/state/DiagramContext.tsx +0 -107
  540. package/src/state/diagram-to-xyflow.ts +0 -150
  541. package/src/state/diagramStore.layout.ts +0 -66
  542. package/src/state/diagramStore.ts +0 -1099
  543. package/src/ui/top-left/TopLeftPanel.tsx +0 -220
  544. package/src/xyflow/FitviewOnDiagramChange.tsx +0 -83
  545. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +0 -106
  546. package/src/xyflow/XYFlow.tsx +0 -179
  547. package/src/xyflow/XYFlowInner.tsx +0 -48
  548. package/src/xyflow/edges/EdgeLabel.tsx +0 -193
  549. package/src/xyflow/edges/RelationshipEdge.tsx +0 -547
  550. package/src/xyflow/edges/edges.css.ts +0 -288
  551. package/src/xyflow/edges/utils.ts +0 -153
  552. package/src/xyflow/nodes/AnimateVariants.ts +0 -143
  553. package/src/xyflow/nodes/Node.css.ts +0 -44
  554. package/src/xyflow/nodes/compound/CompoundNode.css.ts +0 -258
  555. package/src/xyflow/nodes/compound/CompoundNode.tsx +0 -226
  556. package/src/xyflow/nodes/compound/index.ts +0 -1
  557. package/src/xyflow/nodes/element/ElementLink.css.ts +0 -67
  558. package/src/xyflow/nodes/element/ElementLink.tsx +0 -97
  559. package/src/xyflow/nodes/element/ElementNode.tsx +0 -208
  560. package/src/xyflow/nodes/element/element.css.ts +0 -369
  561. package/src/xyflow/nodes/element/index.ts +0 -1
  562. package/src/xyflow/nodes/shared/ElementIcon.tsx +0 -43
  563. package/src/xyflow/nodes/shared/Toolbar.tsx +0 -496
  564. package/src/xyflow/types.ts +0 -57
  565. package/src/xyflow/useXYFlowEvents.ts +0 -315
  566. /package/dist/{xyflow → base}/const.d.ts +0 -0
  567. /package/dist/{xyflow → base}/const.js +0 -0
  568. /package/dist/{ui → context}/EnsureMantine.d.ts +0 -0
  569. /package/dist/{ui → context}/EnsureMantine.js +0 -0
  570. /package/dist/{ui → context}/FramerMotionConfig.d.ts +0 -0
  571. /package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.d.ts +0 -0
  572. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.d.ts +0 -0
  573. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.d.ts +0 -0
  574. /package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.d.ts +0 -0
  575. /package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.d.ts +0 -0
  576. /package/dist/{ui → likec4diagram/ui/diagram-title}/Link.js +0 -0
  577. /package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.css.d.ts +0 -0
  578. /package/dist/{ui → likec4diagram/ui}/notation/index.d.ts +0 -0
  579. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.d.ts +0 -0
  580. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.d.ts +0 -0
  581. /package/src/{ui → context}/EnsureMantine.tsx +0 -0
  582. /package/src/{ui → likec4diagram/ui}/notation/index.ts +0 -0
@@ -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