@likec4/diagram 1.19.2 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.css.js +1 -5
  3. package/dist/LikeC4Diagram.d.ts +1 -4
  4. package/dist/LikeC4Diagram.js +102 -147
  5. package/dist/LikeC4Diagram.props.d.ts +10 -16
  6. package/dist/LikeC4Search.js +7 -15
  7. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  8. package/dist/base/Background.d.ts +7 -0
  9. package/dist/{xyflow/XYFlowBackground.js → base/Background.js} +5 -6
  10. package/dist/base/BaseXYFlow.d.ts +14 -0
  11. package/dist/base/BaseXYFlow.js +146 -0
  12. package/dist/base/example/RelationshipsBrowser.d.ts +6 -0
  13. package/dist/base/example/_types.d.ts +20 -0
  14. package/dist/base/example/custom.d.ts +71 -0
  15. package/dist/base/example/useViewToNodesEdges.d.ts +6 -0
  16. package/dist/base/index.d.ts +2 -0
  17. package/dist/base/primitives/NodeHandles.d.ts +4 -0
  18. package/dist/base/primitives/NodeHandles.js +14 -0
  19. package/dist/base/primitives/compound/CompoundActionButton.css.d.ts +3 -0
  20. package/dist/base/primitives/compound/CompoundActionButton.css.js +9 -0
  21. package/dist/base/primitives/compound/CompoundActionButton.d.ts +7 -0
  22. package/dist/base/primitives/compound/CompoundActionButton.js +48 -0
  23. package/dist/base/primitives/compound/CompoundDetailsButton.css.d.ts +3 -0
  24. package/dist/base/primitives/compound/CompoundDetailsButton.css.js +9 -0
  25. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +7 -0
  26. package/dist/base/primitives/compound/CompoundDetailsButton.js +50 -0
  27. package/dist/base/primitives/compound/CompoundNodeContainer.css.d.ts +9 -0
  28. package/dist/base/primitives/compound/CompoundNodeContainer.css.js +17 -0
  29. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +26 -0
  30. package/dist/base/primitives/compound/CompoundNodeContainer.js +86 -0
  31. package/dist/base/primitives/compound/CompoundTitle.css.d.ts +2 -0
  32. package/dist/base/primitives/compound/CompoundTitle.css.js +7 -0
  33. package/dist/base/primitives/compound/CompoundTitle.d.ts +6 -0
  34. package/dist/base/primitives/compound/CompoundTitle.js +20 -0
  35. package/dist/base/primitives/customEdge.d.ts +41 -0
  36. package/dist/base/primitives/customEdge.js +13 -0
  37. package/dist/base/primitives/customNode.d.ts +7 -0
  38. package/dist/base/primitives/customNode.js +10 -0
  39. package/dist/base/primitives/edge/EdgeActionButton.d.ts +7 -0
  40. package/dist/base/primitives/edge/EdgeActionButton.js +24 -0
  41. package/dist/base/primitives/edge/EdgeContainer.d.ts +10 -0
  42. package/dist/base/primitives/edge/EdgeContainer.js +35 -0
  43. package/dist/{xyflow/edges/edges.css.d.ts → base/primitives/edge/EdgeLabel.css.d.ts} +5 -9
  44. package/dist/base/primitives/edge/EdgeLabel.css.js +25 -0
  45. package/dist/base/primitives/edge/EdgeLabel.d.ts +51 -0
  46. package/dist/base/primitives/edge/EdgeLabel.js +90 -0
  47. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.d.ts +2 -0
  48. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.js +29 -1
  49. package/dist/base/primitives/edge/EdgePath.d.ts +44 -0
  50. package/dist/base/primitives/edge/EdgePath.js +77 -0
  51. package/dist/base/primitives/edge/edge.css.d.ts +6 -0
  52. package/dist/base/primitives/edge/edge.css.js +14 -0
  53. package/dist/base/primitives/element/ElementActionButtons.css.d.ts +3 -0
  54. package/dist/base/primitives/element/ElementActionButtons.css.js +9 -0
  55. package/dist/base/primitives/element/ElementActionButtons.d.ts +13 -0
  56. package/dist/base/primitives/element/ElementActionButtons.js +62 -0
  57. package/dist/base/primitives/element/ElementDetailsButton.css.d.ts +3 -0
  58. package/dist/base/primitives/element/ElementDetailsButton.css.js +9 -0
  59. package/dist/base/primitives/element/ElementDetailsButton.d.ts +7 -0
  60. package/dist/base/primitives/element/ElementDetailsButton.js +54 -0
  61. package/dist/base/primitives/element/ElementNodeContainer.css.d.ts +3 -0
  62. package/dist/base/primitives/element/ElementNodeContainer.css.js +7 -0
  63. package/dist/base/primitives/element/ElementNodeContainer.d.ts +26 -0
  64. package/dist/base/primitives/element/ElementNodeContainer.js +60 -0
  65. package/dist/base/primitives/element/ElementShape.css.d.ts +6 -0
  66. package/dist/base/primitives/element/ElementShape.css.js +14 -0
  67. package/dist/base/primitives/element/ElementShape.d.ts +28 -0
  68. package/dist/{xyflow/nodes/element/ElementShapeSvg.js → base/primitives/element/ElementShape.js} +23 -7
  69. package/dist/base/primitives/element/ElementTitle.css.d.ts +8 -0
  70. package/dist/base/primitives/element/ElementTitle.css.js +19 -0
  71. package/dist/base/primitives/element/ElementTitle.d.ts +10 -0
  72. package/dist/base/primitives/element/ElementTitle.js +66 -0
  73. package/dist/base/primitives/index.d.ts +17 -0
  74. package/dist/base/types.d.ts +90 -0
  75. package/dist/base/types.js +54 -0
  76. package/dist/base/updateEdges.d.ts +3 -0
  77. package/dist/base/updateEdges.js +31 -0
  78. package/dist/base/updateNodes.d.ts +3 -0
  79. package/dist/base/updateNodes.js +36 -0
  80. package/dist/base/xyflowMachine.d.ts +212 -0
  81. package/dist/context/DiagramEventHandlers.d.ts +10 -0
  82. package/dist/context/DiagramEventHandlers.js +49 -0
  83. package/dist/context/DiagramFeatures.d.ts +31 -0
  84. package/dist/context/DiagramFeatures.js +140 -0
  85. package/dist/{ui → context}/FramerMotionConfig.js +2 -4
  86. package/dist/context/IconRenderer.d.ts +11 -0
  87. package/dist/{xyflow/nodes/shared/ElementIcon.js → context/IconRenderer.js} +14 -14
  88. package/dist/context/RootContainer.d.ts +9 -0
  89. package/dist/context/RootContainer.js +20 -0
  90. package/dist/context/index.d.ts +7 -0
  91. package/dist/globals.css.js +0 -86
  92. package/dist/hooks/index.d.ts +7 -5
  93. package/dist/hooks/useCurrentViewId.d.ts +2 -0
  94. package/dist/hooks/useCurrentViewId.js +8 -0
  95. package/dist/hooks/useDiagram.d.ts +10725 -0
  96. package/dist/hooks/useDiagram.js +119 -0
  97. package/dist/hooks/useDiagramActor.d.ts +5 -0
  98. package/dist/hooks/useDiagramActor.js +21 -0
  99. package/dist/hooks/useDiagramContext.d.ts +3 -0
  100. package/dist/hooks/useDiagramContext.js +10 -0
  101. package/dist/hooks/useMantinePortalProps.js +2 -2
  102. package/dist/hooks/useXYFlow.d.ts +195 -37
  103. package/dist/hooks/useXYFlow.js +4 -6
  104. package/dist/index.d.ts +3 -2
  105. package/dist/index.js +5 -6
  106. package/dist/likec4diagram/DiagramActor.d.ts +7 -0
  107. package/dist/likec4diagram/DiagramActor.js +71 -0
  108. package/dist/likec4diagram/DiagramUI.d.ts +2 -0
  109. package/dist/likec4diagram/DiagramUI.js +22 -0
  110. package/dist/likec4diagram/XYFlow.d.ts +6 -0
  111. package/dist/likec4diagram/XYFlow.js +122 -0
  112. package/dist/likec4diagram/custom/edges/NotePopover.css.d.ts +2 -0
  113. package/dist/likec4diagram/custom/edges/NotePopover.css.js +7 -0
  114. package/dist/likec4diagram/custom/edges/NotePopover.d.ts +4 -0
  115. package/dist/likec4diagram/custom/edges/NotePopover.js +101 -0
  116. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +55 -0
  117. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +307 -0
  118. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.js +4 -4
  119. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.d.ts +5 -5
  120. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.js +51 -53
  121. package/dist/likec4diagram/custom/edges/edges.css.d.ts +2 -0
  122. package/dist/likec4diagram/custom/edges/edges.css.js +7 -0
  123. package/dist/likec4diagram/custom/edges/utils.d.ts +22 -0
  124. package/dist/likec4diagram/custom/edges/utils.js +25 -0
  125. package/dist/likec4diagram/custom/index.d.ts +57 -0
  126. package/dist/likec4diagram/custom/index.js +7 -0
  127. package/dist/likec4diagram/custom/nodes/CompoundActions.d.ts +5 -0
  128. package/dist/likec4diagram/custom/nodes/CompoundActions.js +25 -0
  129. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +7 -0
  130. package/dist/likec4diagram/custom/nodes/ElementActions.js +69 -0
  131. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +10 -0
  132. package/dist/likec4diagram/custom/nodes/nodeTypes.js +94 -0
  133. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +21 -0
  134. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +159 -0
  135. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.d.ts +7 -0
  136. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +128 -0
  137. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.d.ts +7 -0
  138. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +149 -0
  139. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +8 -0
  140. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +66 -0
  141. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +40 -0
  142. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +131 -0
  143. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.d.ts +1 -0
  144. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +5 -0
  145. package/dist/likec4diagram/state/actorContext.d.ts +50849 -0
  146. package/dist/likec4diagram/state/actorContext.js +12 -0
  147. package/dist/{state → likec4diagram/state}/aligners.d.ts +4 -1
  148. package/dist/{state → likec4diagram/state}/aligners.js +31 -5
  149. package/dist/likec4diagram/state/assign.d.ts +18 -0
  150. package/dist/likec4diagram/state/assign.js +343 -0
  151. package/dist/likec4diagram/state/hotkeyActor.d.ts +5 -0
  152. package/dist/likec4diagram/state/hotkeyActor.js +18 -0
  153. package/dist/likec4diagram/state/inspector.d.ts +5 -0
  154. package/dist/likec4diagram/state/machine.d.ts +10751 -0
  155. package/dist/likec4diagram/state/machine.js +783 -0
  156. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +113 -0
  157. package/dist/likec4diagram/state/syncManualLayoutActor.js +178 -0
  158. package/dist/likec4diagram/state/utils.d.ts +8 -0
  159. package/dist/likec4diagram/state/utils.js +48 -0
  160. package/dist/likec4diagram/types.d.ts +74 -0
  161. package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.js +11 -10
  162. package/dist/likec4diagram/ui/controls/Controls.d.ts +2 -0
  163. package/dist/likec4diagram/ui/controls/Controls.js +102 -0
  164. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.d.ts +2 -0
  165. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +43 -0
  166. package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.js +11 -11
  167. package/dist/likec4diagram/ui/controls/NavigationButtons.d.ts +1 -0
  168. package/dist/likec4diagram/ui/controls/NavigationButtons.js +92 -0
  169. package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.js +2 -1
  170. package/dist/{ui/top-left → likec4diagram/ui/controls}/styles.css.d.ts +1 -1
  171. package/dist/likec4diagram/ui/controls/styles.css.js +17 -0
  172. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.js +11 -0
  173. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.d.ts +1 -0
  174. package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.js +3 -3
  175. package/dist/likec4diagram/ui/diagram-title/Link.d.ts +4 -0
  176. package/dist/likec4diagram/ui/index.d.ts +2 -0
  177. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +13 -0
  178. package/dist/likec4diagram/ui/notation/NotationPanel.d.ts +2 -0
  179. package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.js +23 -31
  180. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.js +4 -4
  181. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.js +19 -44
  182. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.d.ts +11 -6
  183. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.js +17 -12
  184. package/dist/likec4diagram/useViewToNodesEdges.d.ts +11 -0
  185. package/dist/likec4diagram/useViewToNodesEdges.js +245 -0
  186. package/dist/likec4model/index.d.ts +1 -1
  187. package/dist/likec4model/useLikeC4Model.d.ts +1 -11
  188. package/dist/likec4model/useLikeC4Model.js +1 -39
  189. package/dist/overlays/Overlays.js +61 -105
  190. package/dist/overlays/element-details/ElementDetailsCard.js +111 -116
  191. package/dist/overlays/element-details/TabPanelDeployments.js +4 -7
  192. package/dist/overlays/element-details/TabPanelRelationships.css.js +0 -2
  193. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  194. package/dist/overlays/element-details/TabPanelRelationships.js +35 -64
  195. package/dist/overlays/element-details/TabPanelStructure.d.ts +2 -2
  196. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  197. package/dist/overlays/overlay/Overlay.css.d.ts +2 -0
  198. package/dist/overlays/overlay/Overlay.css.js +93 -0
  199. package/dist/overlays/overlay/Overlay.d.ts +8 -0
  200. package/dist/overlays/overlay/Overlay.js +86 -0
  201. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +5 -0
  202. package/dist/overlays/relationship-details/RelationshipDetails.js +189 -0
  203. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.css.d.ts +1 -0
  204. package/dist/overlays/relationship-details/SelectEdge.css.js +17 -0
  205. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.d.ts +1 -1
  206. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.js +8 -8
  207. package/dist/overlays/relationship-details/_types.d.ts +36 -0
  208. package/dist/overlays/relationship-details/actor.d.ts +41 -0
  209. package/dist/overlays/relationship-details/actor.js +113 -0
  210. package/dist/overlays/relationship-details/custom/ElementActions.d.ts +5 -0
  211. package/dist/overlays/relationship-details/custom/ElementActions.js +33 -0
  212. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +49 -0
  213. package/dist/overlays/relationship-details/custom/edgeTypes.js +51 -0
  214. package/dist/overlays/relationship-details/custom/index.d.ts +2 -0
  215. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +39 -0
  216. package/dist/overlays/relationship-details/custom/nodeTypes.js +89 -0
  217. package/dist/overlays/relationship-details/custom/styles.css.d.ts +1 -0
  218. package/dist/overlays/relationship-details/hooks.d.ts +59 -0
  219. package/dist/overlays/relationship-details/hooks.js +46 -0
  220. package/dist/overlays/{edge-details/use-layouted-edge-details.d.ts → relationship-details/useLayoutedDetails.d.ts} +4 -6
  221. package/dist/overlays/{edge-details/use-layouted-edge-details.js → relationship-details/useLayoutedDetails.js} +68 -64
  222. package/dist/overlays/relationships-browser/-useRelationshipsView.d.ts +39 -0
  223. package/dist/overlays/relationships-browser/-useRelationshipsView.js +488 -0
  224. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +5 -0
  225. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +209 -0
  226. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.css.d.ts +1 -0
  227. package/dist/overlays/relationships-browser/SelectElement.css.js +9 -0
  228. package/dist/overlays/relationships-browser/SelectElement.d.ts +7 -0
  229. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.js +11 -7
  230. package/dist/overlays/relationships-browser/_types.d.ts +40 -0
  231. package/dist/overlays/relationships-browser/actor.d.ts +66 -0
  232. package/dist/overlays/relationships-browser/actor.js +159 -0
  233. package/dist/overlays/relationships-browser/custom/ElementActions.d.ts +5 -0
  234. package/dist/overlays/relationships-browser/custom/ElementActions.js +43 -0
  235. package/dist/overlays/relationships-browser/custom/EmptyNode.d.ts +5 -0
  236. package/dist/overlays/{relationships-of/xyflow → relationships-browser/custom}/EmptyNode.js +1 -3
  237. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +46 -0
  238. package/dist/overlays/relationships-browser/custom/edgeTypes.js +51 -0
  239. package/dist/overlays/relationships-browser/custom/index.d.ts +2 -0
  240. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +45 -0
  241. package/dist/overlays/relationships-browser/custom/nodeTypes.js +93 -0
  242. package/dist/overlays/relationships-browser/custom/styles.css.d.ts +1 -0
  243. package/dist/overlays/relationships-browser/custom/styles.css.js +5 -0
  244. package/dist/overlays/relationships-browser/hooks.d.ts +62 -0
  245. package/dist/overlays/relationships-browser/hooks.js +46 -0
  246. package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +10 -0
  247. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +160 -0
  248. package/dist/style.css +1 -1
  249. package/dist/utils/index.d.ts +4 -0
  250. package/dist/{xyflow/utils.d.ts → utils/xyflow.d.ts} +4 -4
  251. package/dist/{xyflow/utils.js → utils/xyflow.js} +14 -20
  252. package/package.json +23 -20
  253. package/src/LikeC4Diagram.css.ts +21 -15
  254. package/src/LikeC4Diagram.props.ts +14 -21
  255. package/src/LikeC4Diagram.tsx +105 -150
  256. package/src/LikeC4Search.tsx +21 -28
  257. package/src/StaticLikeC4Diagram.tsx +0 -1
  258. package/src/{xyflow/XYFlowBackground.tsx → base/Background.tsx} +8 -8
  259. package/src/base/BaseXYFlow.tsx +200 -0
  260. package/src/{xyflow → base}/const.ts +1 -1
  261. package/src/base/example/RelationshipsBrowser.tsx +62 -0
  262. package/src/base/example/_types.ts +71 -0
  263. package/src/base/example/custom.tsx +58 -0
  264. package/src/base/example/useViewToNodesEdges.ts +193 -0
  265. package/src/base/index.ts +10 -0
  266. package/src/base/primitives/NodeHandles.tsx +18 -0
  267. package/src/base/primitives/compound/CompoundActionButton.css.ts +55 -0
  268. package/src/base/primitives/compound/CompoundActionButton.tsx +52 -0
  269. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +56 -0
  270. package/src/base/primitives/compound/CompoundDetailsButton.tsx +54 -0
  271. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +161 -0
  272. package/src/base/primitives/compound/CompoundNodeContainer.tsx +95 -0
  273. package/src/base/primitives/compound/CompoundTitle.css.ts +43 -0
  274. package/src/base/primitives/compound/CompoundTitle.tsx +29 -0
  275. package/src/base/primitives/customEdge.ts +32 -0
  276. package/src/base/primitives/customNode.ts +21 -0
  277. package/src/base/primitives/edge/EdgeActionButton.tsx +27 -0
  278. package/src/base/primitives/edge/EdgeContainer.tsx +48 -0
  279. package/src/base/primitives/edge/EdgeLabel.css.ts +196 -0
  280. package/src/base/primitives/edge/EdgeLabel.tsx +136 -0
  281. package/src/{xyflow → base/primitives/edge}/EdgeMarkers.tsx +29 -1
  282. package/src/base/primitives/edge/EdgePath.tsx +89 -0
  283. package/src/base/primitives/edge/edge.css.ts +122 -0
  284. package/src/base/primitives/element/ElementActionButtons.css.ts +48 -0
  285. package/src/base/primitives/element/ElementActionButtons.tsx +73 -0
  286. package/src/base/primitives/element/ElementDetailsButton.css.ts +54 -0
  287. package/src/base/primitives/element/ElementDetailsButton.tsx +59 -0
  288. package/src/base/primitives/element/ElementNodeContainer.css.ts +47 -0
  289. package/src/base/primitives/element/ElementNodeContainer.tsx +72 -0
  290. package/src/base/primitives/element/ElementShape.css.ts +134 -0
  291. package/src/{xyflow/nodes/element/ElementShapeSvg.tsx → base/primitives/element/ElementShape.tsx} +64 -19
  292. package/src/base/primitives/element/ElementTitle.css.ts +156 -0
  293. package/src/base/primitives/element/ElementTitle.tsx +76 -0
  294. package/src/base/primitives/index.ts +17 -0
  295. package/src/base/types.ts +169 -0
  296. package/src/base/updateEdges.ts +40 -0
  297. package/src/base/updateNodes.ts +46 -0
  298. package/src/base/xyflowMachine.ts +75 -0
  299. package/src/context/DiagramEventHandlers.tsx +53 -0
  300. package/src/context/DiagramFeatures.tsx +162 -0
  301. package/src/{ui → context}/FramerMotionConfig.tsx +2 -6
  302. package/src/context/IconRenderer.tsx +45 -0
  303. package/src/context/RootContainer.tsx +31 -0
  304. package/src/context/index.ts +14 -0
  305. package/src/globals.css.ts +32 -32
  306. package/src/hooks/index.ts +7 -5
  307. package/src/hooks/useCurrentViewId.ts +8 -0
  308. package/src/hooks/useDiagram.ts +129 -0
  309. package/src/hooks/useDiagramActor.ts +25 -0
  310. package/src/hooks/useDiagramContext.ts +11 -0
  311. package/src/hooks/useMantinePortalProps.ts +2 -2
  312. package/src/hooks/useXYFlow.ts +12 -38
  313. package/src/index.ts +3 -7
  314. package/src/likec4diagram/DiagramActor.tsx +79 -0
  315. package/src/likec4diagram/DiagramUI.tsx +28 -0
  316. package/src/likec4diagram/XYFlow.tsx +137 -0
  317. package/src/likec4diagram/custom/edges/NotePopover.css.ts +27 -0
  318. package/src/likec4diagram/custom/edges/NotePopover.tsx +96 -0
  319. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +355 -0
  320. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.ts +7 -7
  321. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.tsx +91 -70
  322. package/src/likec4diagram/custom/edges/edges.css.ts +39 -0
  323. package/src/likec4diagram/custom/edges/utils.ts +126 -0
  324. package/src/likec4diagram/custom/index.tsx +8 -0
  325. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +27 -0
  326. package/src/likec4diagram/custom/nodes/ElementActions.tsx +74 -0
  327. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +107 -0
  328. package/src/likec4diagram/custom/nodes/toolbar/ColorButton.tsx +175 -0
  329. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +122 -0
  330. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +140 -0
  331. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +77 -0
  332. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +143 -0
  333. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +9 -0
  334. package/src/likec4diagram/state/actorContext.ts +8 -0
  335. package/src/{state → likec4diagram/state}/aligners.ts +67 -40
  336. package/src/likec4diagram/state/assign.ts +384 -0
  337. package/src/likec4diagram/state/hotkeyActor.ts +20 -0
  338. package/src/likec4diagram/state/inspector.ts +23 -0
  339. package/src/likec4diagram/state/machine.ts +946 -0
  340. package/src/likec4diagram/state/syncManualLayoutActor.ts +219 -0
  341. package/src/likec4diagram/state/utils.ts +52 -0
  342. package/src/likec4diagram/types.ts +144 -0
  343. package/src/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.tsx +32 -28
  344. package/src/likec4diagram/ui/controls/Controls.tsx +107 -0
  345. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +46 -0
  346. package/src/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.tsx +16 -16
  347. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +83 -0
  348. package/src/{ui/top-left → likec4diagram/ui/controls}/_shared.ts +4 -3
  349. package/src/{ui/top-left → likec4diagram/ui/controls}/styles.css.ts +17 -17
  350. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.ts +11 -11
  351. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.tsx +6 -5
  352. package/src/likec4diagram/ui/diagram-title/Link.tsx +40 -0
  353. package/src/likec4diagram/ui/index.ts +2 -0
  354. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.css.ts +18 -18
  355. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.tsx +44 -44
  356. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.ts +16 -16
  357. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.tsx +29 -49
  358. package/src/{xyflow → likec4diagram}/useLayoutConstraints.ts +54 -43
  359. package/src/likec4diagram/useViewToNodesEdges.ts +297 -0
  360. package/src/likec4model/index.ts +0 -6
  361. package/src/likec4model/useLikeC4Model.ts +1 -43
  362. package/src/overlays/Overlays.tsx +201 -147
  363. package/src/overlays/element-details/ElementDetailsCard.css.ts +58 -58
  364. package/src/overlays/element-details/ElementDetailsCard.tsx +143 -128
  365. package/src/overlays/element-details/TabPanelDeployments.css.ts +14 -14
  366. package/src/overlays/element-details/TabPanelDeployments.tsx +22 -22
  367. package/src/overlays/element-details/TabPanelRelationships.css.ts +19 -19
  368. package/src/overlays/element-details/TabPanelRelationships.tsx +45 -28
  369. package/src/overlays/element-details/TabPanelStructure.css.ts +7 -7
  370. package/src/overlays/element-details/TabPanelStructure.tsx +11 -11
  371. package/src/overlays/overlay/Overlay.css.ts +73 -0
  372. package/src/overlays/overlay/Overlay.tsx +99 -0
  373. package/src/overlays/relationship-details/RelationshipDetails.tsx +234 -0
  374. package/src/overlays/{edge-details → relationship-details}/SelectEdge.css.ts +20 -13
  375. package/src/overlays/{edge-details → relationship-details}/SelectEdge.tsx +14 -14
  376. package/src/overlays/relationship-details/_types.ts +73 -0
  377. package/src/overlays/relationship-details/actor.ts +162 -0
  378. package/src/overlays/relationship-details/custom/ElementActions.tsx +45 -0
  379. package/src/overlays/relationship-details/custom/edgeTypes.tsx +49 -0
  380. package/src/overlays/relationship-details/custom/index.tsx +2 -0
  381. package/src/overlays/relationship-details/custom/nodeTypes.tsx +108 -0
  382. package/src/overlays/relationship-details/custom/styles.css.ts +13 -0
  383. package/src/overlays/relationship-details/hooks.ts +48 -0
  384. package/src/overlays/{edge-details/use-layouted-edge-details.ts → relationship-details/useLayoutedDetails.ts} +128 -114
  385. package/src/overlays/relationships-browser/-useRelationshipsView.ts +642 -0
  386. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +247 -0
  387. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.css.ts +12 -5
  388. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.tsx +19 -17
  389. package/src/overlays/relationships-browser/_types.ts +89 -0
  390. package/src/overlays/relationships-browser/actor.ts +224 -0
  391. package/src/overlays/relationships-browser/custom/ElementActions.tsx +44 -0
  392. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +18 -0
  393. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +49 -0
  394. package/src/overlays/relationships-browser/custom/index.tsx +2 -0
  395. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +109 -0
  396. package/src/overlays/relationships-browser/custom/styles.css.ts +13 -0
  397. package/src/overlays/relationships-browser/hooks.ts +48 -0
  398. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +209 -0
  399. package/src/utils/index.ts +15 -0
  400. package/src/{xyflow/utils.ts → utils/xyflow.ts} +22 -8
  401. package/dist/_virtual/_commonjsHelpers.js +0 -6
  402. package/dist/controls/Text.d.ts +0 -2
  403. package/dist/controls/Text.js +0 -7
  404. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +0 -1
  405. package/dist/controls/action-button-bar/ActionButtonBar.css.js +0 -5
  406. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +0 -9
  407. package/dist/controls/action-button-bar/ActionButtonBar.js +0 -100
  408. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +0 -10
  409. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +0 -9
  410. package/dist/controls/action-buttons/ActionButton.css.d.ts +0 -1
  411. package/dist/controls/action-buttons/ActionButton.css.js +0 -5
  412. package/dist/controls/action-buttons/ActionButton.d.ts +0 -9
  413. package/dist/controls/action-buttons/ActionButton.js +0 -66
  414. package/dist/controls/action-buttons/ActionButtons.d.ts +0 -12
  415. package/dist/controls/action-buttons/ActionButtons.js +0 -99
  416. package/dist/hooks/useDiagramState.d.ts +0 -6
  417. package/dist/hooks/useDiagramState.js +0 -27
  418. package/dist/overlays/OverlayContext.d.ts +0 -10
  419. package/dist/overlays/OverlayContext.js +0 -9
  420. package/dist/overlays/Overlays.css.d.ts +0 -3
  421. package/dist/overlays/Overlays.css.js +0 -7
  422. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +0 -5
  423. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +0 -185
  424. package/dist/overlays/edge-details/SelectEdge.css.js +0 -17
  425. package/dist/overlays/edge-details/_types.d.ts +0 -14
  426. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +0 -5
  427. package/dist/overlays/edge-details/xyflow/CompoundNode.js +0 -76
  428. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +0 -5
  429. package/dist/overlays/edge-details/xyflow/ElementNode.js +0 -159
  430. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +0 -3
  431. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +0 -84
  432. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +0 -9
  433. package/dist/overlays/edge-details/xyflow/styles.css.js +0 -21
  434. package/dist/overlays/index.d.ts +0 -1
  435. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +0 -5
  436. package/dist/overlays/relationships-of/RelationshipsOverlay.js +0 -193
  437. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +0 -19
  438. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +0 -290
  439. package/dist/overlays/relationships-of/SelectElement.css.js +0 -7
  440. package/dist/overlays/relationships-of/SelectElement.d.ts +0 -7
  441. package/dist/overlays/relationships-of/_types.d.ts +0 -28
  442. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +0 -22
  443. package/dist/overlays/relationships-of/use-layouted-relationships.js +0 -496
  444. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +0 -6
  445. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +0 -120
  446. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +0 -6
  447. package/dist/overlays/relationships-of/xyflow/ElementNode.js +0 -194
  448. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +0 -5
  449. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +0 -3
  450. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +0 -123
  451. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +0 -14
  452. package/dist/overlays/relationships-of/xyflow/styles.css.js +0 -24
  453. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +0 -4
  454. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +0 -12
  455. package/dist/overlays/shared/xyflow/_types.d.ts +0 -77
  456. package/dist/state/DiagramContext.d.ts +0 -1609
  457. package/dist/state/DiagramContext.js +0 -101
  458. package/dist/state/diagram-to-xyflow.d.ts +0 -11
  459. package/dist/state/diagram-to-xyflow.js +0 -113
  460. package/dist/state/diagramStore.d.ts +0 -1705
  461. package/dist/state/diagramStore.js +0 -808
  462. package/dist/state/diagramStore.layout.d.ts +0 -4
  463. package/dist/state/diagramStore.layout.js +0 -56
  464. package/dist/ui/DiagramTitlePanel.css.js +0 -11
  465. package/dist/ui/DiagramTitlePanel.d.ts +0 -1
  466. package/dist/ui/notation/NotationPanel.css.js +0 -16
  467. package/dist/ui/notation/NotationPanel.d.ts +0 -1
  468. package/dist/ui/top-left/TopLeftPanel.d.ts +0 -4
  469. package/dist/ui/top-left/TopLeftPanel.js +0 -211
  470. package/dist/ui/top-left/styles.css.js +0 -17
  471. package/dist/xyflow/FitviewOnDiagramChange.d.ts +0 -4
  472. package/dist/xyflow/FitviewOnDiagramChange.js +0 -72
  473. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +0 -1
  474. package/dist/xyflow/SelectEdgesOnNodeFocus.js +0 -96
  475. package/dist/xyflow/XYFlow.d.ts +0 -8
  476. package/dist/xyflow/XYFlow.js +0 -145
  477. package/dist/xyflow/XYFlowBackground.d.ts +0 -10
  478. package/dist/xyflow/XYFlowInner.d.ts +0 -8
  479. package/dist/xyflow/XYFlowInner.js +0 -41
  480. package/dist/xyflow/edges/EdgeLabel.d.ts +0 -7
  481. package/dist/xyflow/edges/EdgeLabel.js +0 -160
  482. package/dist/xyflow/edges/RelationshipEdge.d.ts +0 -6
  483. package/dist/xyflow/edges/RelationshipEdge.js +0 -443
  484. package/dist/xyflow/edges/edges.css.js +0 -37
  485. package/dist/xyflow/edges/utils.d.ts +0 -16
  486. package/dist/xyflow/edges/utils.js +0 -24
  487. package/dist/xyflow/nodes/AnimateVariants.d.ts +0 -1313
  488. package/dist/xyflow/nodes/AnimateVariants.js +0 -123
  489. package/dist/xyflow/nodes/Node.css.d.ts +0 -3
  490. package/dist/xyflow/nodes/Node.css.js +0 -9
  491. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -14
  492. package/dist/xyflow/nodes/compound/CompoundNode.css.js +0 -27
  493. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -6
  494. package/dist/xyflow/nodes/compound/CompoundNode.js +0 -216
  495. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  496. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -3
  497. package/dist/xyflow/nodes/element/ElementLink.d.ts +0 -6
  498. package/dist/xyflow/nodes/element/ElementNode.d.ts +0 -6
  499. package/dist/xyflow/nodes/element/ElementNode.js +0 -190
  500. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +0 -17
  501. package/dist/xyflow/nodes/element/element.css.d.ts +0 -18
  502. package/dist/xyflow/nodes/element/element.css.js +0 -31
  503. package/dist/xyflow/nodes/element/index.d.ts +0 -1
  504. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +0 -8
  505. package/dist/xyflow/nodes/shared/Toolbar.d.ts +0 -9
  506. package/dist/xyflow/nodes/shared/Toolbar.js +0 -436
  507. package/dist/xyflow/types.d.ts +0 -36
  508. package/dist/xyflow/useXYFlowEvents.d.ts +0 -160
  509. package/dist/xyflow/useXYFlowEvents.js +0 -275
  510. package/src/controls/Text.ts +0 -5
  511. package/src/controls/action-button-bar/ActionButtonBar.css.ts +0 -13
  512. package/src/controls/action-button-bar/ActionButtonBar.tsx +0 -138
  513. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +0 -13
  514. package/src/controls/action-buttons/ActionButton.css.ts +0 -29
  515. package/src/controls/action-buttons/ActionButton.tsx +0 -66
  516. package/src/controls/action-buttons/ActionButtons.tsx +0 -138
  517. package/src/hooks/useDiagramState.ts +0 -36
  518. package/src/overlays/OverlayContext.tsx +0 -11
  519. package/src/overlays/Overlays.css.ts +0 -136
  520. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +0 -255
  521. package/src/overlays/edge-details/_types.ts +0 -18
  522. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +0 -72
  523. package/src/overlays/edge-details/xyflow/ElementNode.tsx +0 -152
  524. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +0 -85
  525. package/src/overlays/edge-details/xyflow/styles.css.ts +0 -144
  526. package/src/overlays/index.tsx +0 -1
  527. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +0 -185
  528. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +0 -378
  529. package/src/overlays/relationships-of/_types.ts +0 -40
  530. package/src/overlays/relationships-of/use-layouted-relationships.ts +0 -699
  531. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +0 -124
  532. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +0 -194
  533. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +0 -19
  534. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +0 -127
  535. package/src/overlays/relationships-of/xyflow/styles.css.ts +0 -214
  536. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +0 -60
  537. package/src/overlays/shared/xyflow/_types.ts +0 -87
  538. package/src/state/DiagramContext.tsx +0 -107
  539. package/src/state/diagram-to-xyflow.ts +0 -150
  540. package/src/state/diagramStore.layout.ts +0 -66
  541. package/src/state/diagramStore.ts +0 -1099
  542. package/src/ui/top-left/TopLeftPanel.tsx +0 -220
  543. package/src/xyflow/FitviewOnDiagramChange.tsx +0 -83
  544. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +0 -106
  545. package/src/xyflow/XYFlow.tsx +0 -179
  546. package/src/xyflow/XYFlowInner.tsx +0 -48
  547. package/src/xyflow/edges/EdgeLabel.tsx +0 -193
  548. package/src/xyflow/edges/RelationshipEdge.tsx +0 -547
  549. package/src/xyflow/edges/edges.css.ts +0 -288
  550. package/src/xyflow/edges/utils.ts +0 -153
  551. package/src/xyflow/nodes/AnimateVariants.ts +0 -143
  552. package/src/xyflow/nodes/Node.css.ts +0 -44
  553. package/src/xyflow/nodes/compound/CompoundNode.css.ts +0 -258
  554. package/src/xyflow/nodes/compound/CompoundNode.tsx +0 -227
  555. package/src/xyflow/nodes/compound/index.ts +0 -1
  556. package/src/xyflow/nodes/element/ElementLink.css.ts +0 -67
  557. package/src/xyflow/nodes/element/ElementLink.tsx +0 -97
  558. package/src/xyflow/nodes/element/ElementNode.tsx +0 -209
  559. package/src/xyflow/nodes/element/element.css.ts +0 -369
  560. package/src/xyflow/nodes/element/index.ts +0 -1
  561. package/src/xyflow/nodes/shared/ElementIcon.tsx +0 -43
  562. package/src/xyflow/nodes/shared/Toolbar.tsx +0 -496
  563. package/src/xyflow/types.ts +0 -57
  564. package/src/xyflow/useXYFlowEvents.ts +0 -315
  565. /package/dist/{xyflow → base}/const.d.ts +0 -0
  566. /package/dist/{xyflow → base}/const.js +0 -0
  567. /package/dist/{ui → context}/EnsureMantine.d.ts +0 -0
  568. /package/dist/{ui → context}/EnsureMantine.js +0 -0
  569. /package/dist/{ui → context}/FramerMotionConfig.d.ts +0 -0
  570. /package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.d.ts +0 -0
  571. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.d.ts +0 -0
  572. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.d.ts +0 -0
  573. /package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.d.ts +0 -0
  574. /package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.d.ts +0 -0
  575. /package/dist/{ui → likec4diagram/ui/diagram-title}/Link.js +0 -0
  576. /package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.css.d.ts +0 -0
  577. /package/dist/{ui → likec4diagram/ui}/notation/index.d.ts +0 -0
  578. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.d.ts +0 -0
  579. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.d.ts +0 -0
  580. /package/src/{ui → context}/EnsureMantine.tsx +0 -0
  581. /package/src/{ui → likec4diagram/ui}/notation/index.ts +0 -0
@@ -1,36 +0,0 @@
1
- import { shallowEqual } from 'fast-equals'
2
- import { useContext } from 'react'
3
- import { useStoreWithEqualityFn as useZustandStore } from 'zustand/traditional'
4
-
5
- import type { ViewId } from '@likec4/core'
6
- import { DiagramContext } from '../state/DiagramContext'
7
- import type { DiagramState, DiagramStoreApi } from '../state/diagramStore'
8
-
9
- const selectViewId = (state: DiagramState) => state.view.id
10
- export function useCurrentViewId(): ViewId {
11
- return useDiagramState(selectViewId)
12
- }
13
-
14
- export function useDiagramState<StateSlice = unknown>(
15
- selector: (state: DiagramState) => StateSlice,
16
- equalityFn?: (a: StateSlice, b: StateSlice) => boolean
17
- ): StateSlice {
18
- const store = useContext(DiagramContext)
19
-
20
- if (store === null) {
21
- throw new Error('useDiagramStore could be used only inside DiagramContext')
22
- }
23
-
24
- return useZustandStore(store, selector, equalityFn ?? shallowEqual)
25
- }
26
-
27
- export function useDiagramStoreApi(): DiagramStoreApi {
28
- const store = useContext(DiagramContext)
29
-
30
- if (store === null) {
31
- throw new Error('useDiagramStoreApi could be used only inside DiagramContext')
32
- }
33
-
34
- return store
35
- }
36
- export type { DiagramState, DiagramStoreApi }
@@ -1,11 +0,0 @@
1
- import { createContext, useContext } from 'react'
2
- import type { DiagramState } from '../hooks'
3
-
4
- export const OverlayContext = createContext({} as {
5
- openOverlay: DiagramState['openOverlay']
6
- close: (onClosed?: () => void) => void
7
- })
8
-
9
- export function useOverlayDialog() {
10
- return useContext(OverlayContext)
11
- }
@@ -1,136 +0,0 @@
1
- import { createVar, globalStyle, style } from '@vanilla-extract/css'
2
- import { mantine, vars, whereDark, whereLight, xyvars } from '../theme-vars'
3
-
4
- export const mixColor = createVar('mix-color')
5
- export const container = style({
6
- position: 'absolute',
7
- top: 0,
8
- left: 0,
9
- padding: 0,
10
- margin: 0,
11
- boxSizing: 'border-box',
12
- border: '0 solid transparent',
13
- width: '100%',
14
- height: '100%',
15
- zIndex: 1000,
16
- isolation: 'isolate',
17
- WebkitBackdropFilter: 'blur(var(--backdrop-blur))',
18
- backdropFilter: 'blur(var(--backdrop-blur))',
19
- backgroundColor: `rgb(200 200 200 / var(--backdrop-opacity))`,
20
- vars: {
21
- '--backdrop-blur': '0px',
22
- '--backdrop-opacity': '0%',
23
- [mixColor]: `black`
24
- },
25
- selectors: {
26
- [`${whereDark} &`]: {
27
- backgroundColor: `rgb(36 36 36 / var(--backdrop-opacity))`,
28
- vars: {
29
- [mixColor]: `white`
30
- }
31
- }
32
- }
33
- })
34
-
35
- export const cssReactflowMarker = style({})
36
- globalStyle(`.react-flow${cssReactflowMarker}`, {
37
- vars: {
38
- // [xyvars.background.color]: vars.likec4.background.color,
39
- [xyvars.background.pattern.color]: vars.likec4.background.pattern.color
40
- }
41
- })
42
-
43
- globalStyle(`${whereDark} .react-flow${cssReactflowMarker}`, {
44
- vars: {
45
- [xyvars.edge.labelColor]: vars.relation.labelColor,
46
- [xyvars.edge.labelBgColor]: `color-mix(in srgb, ${vars.relation.labelBgColor}, transparent 50%)`
47
- }
48
- })
49
- globalStyle(`:where(${cssReactflowMarker}) .react-flow__attribution`, {
50
- display: 'none'
51
- })
52
- globalStyle(`:where(${cssReactflowMarker}) .react-flow__edge-text`, {
53
- fontSize: 16
54
- })
55
- globalStyle(`${cssReactflowMarker} .react-flow__edges > svg`, {
56
- mixBlendMode: 'plus-lighter'
57
- })
58
- globalStyle(`${whereLight} ${cssReactflowMarker} .react-flow__edges > svg`, {
59
- mixBlendMode: 'screen'
60
- })
61
-
62
- // const dialogFadeIn = keyframes({
63
- // '0%': {
64
- // opacity: 0,
65
- // display: 'none'
66
- // },
67
- // '100%': {
68
- // opacity: 1,
69
- // display: 'block'
70
- // }
71
- // })
72
-
73
- // const dialogFadeOut = keyframes({
74
- // '0%': {
75
- // opacity: 1,
76
- // transform: 'scale(1)',
77
- // display: 'block'
78
- // },
79
- // '100%': {
80
- // opacity: 0,
81
- // transform: 'scale(0.98)',
82
- // display: 'none'
83
- // }
84
- // })
85
-
86
- // const backdropRgb = createVar('backdrop-rgb')
87
-
88
- // const dialogBackdropFadeIn = keyframes({
89
- // '0%': {
90
- // WebkitBackdropFilter: 'blur(1px)',
91
- // backdropFilter: 'blur(1px)',
92
- // backgroundColor: `rgb(${backdropRgb} / 30%)`
93
- // },
94
- // '100%': {
95
- // WebkitBackdropFilter: 'blur(8px)',
96
- // backdropFilter: 'blur(8px)',
97
- // backgroundColor: `rgb(${backdropRgb} / 85%)`
98
- // }
99
- // })
100
-
101
- // export const dialog = style({
102
- // top: 0,
103
- // left: 0,
104
- // padding: 0,
105
- // margin: 0,
106
- // boxSizing: 'border-box',
107
- // border: '0 solid transparent',
108
- // width: '100%',
109
- // maxWidth: '100dvw',
110
- // height: '100%',
111
- // maxHeight: '100dvh',
112
- // background: 'transparent',
113
- // animation: `${dialogFadeOut} 130ms cubic-bezier(0.50, 0, 1, 1)`,
114
- // transformOrigin: '50% 20%',
115
- // vars: {
116
- // [backdropRgb]: '255 255 255'
117
- // },
118
- // selectors: {
119
- // [`${whereDark} &`]: {
120
- // vars: {
121
- // [backdropRgb]: '36 36 36'
122
- // }
123
- // },
124
- // '&[open]': {
125
- // animation: `${dialogFadeIn} 200ms cubic-bezier(0, 0, 0.40, 1) forwards`
126
- // },
127
- // '&::backdrop': {
128
- // WebkitBackdropFilter: 'blur(1px)',
129
- // backdropFilter: 'blur(1px)',
130
- // backgroundColor: `rgb(${backdropRgb} / 30%)`
131
- // },
132
- // '&[open]::backdrop': {
133
- // animation: `${dialogBackdropFadeIn} 350ms cubic-bezier(0, 0, 0.40, 1) forwards`
134
- // }
135
- // }
136
- // })
@@ -1,255 +0,0 @@
1
- import { type DiagramEdge, type EdgeId, isAncestor } from '@likec4/core'
2
- import { Box, Group, Text } from '@mantine/core'
3
- import { useDebouncedCallback, useSyncedRef, useUpdateEffect } from '@react-hookz/web'
4
- import {
5
- getViewportForBounds,
6
- Panel,
7
- ReactFlow,
8
- type ReactFlowInstance,
9
- useReactFlow,
10
- useStoreApi,
11
- ViewportPortal
12
- } from '@xyflow/react'
13
- import { memo, useEffect } from 'react'
14
- import { only } from 'remeda'
15
- import { useDiagramStoreApi } from '../../hooks/useDiagramState'
16
- import type { SharedFlowTypes } from '../shared/xyflow/_types'
17
- import type { EdgeDetailsFlowTypes } from './_types'
18
- import { SelectEdge } from './SelectEdge'
19
- import * as css from './SelectEdge.css'
20
- import { useLayoutedEdgeDetails, ZIndexes } from './use-layouted-edge-details'
21
- import { CompoundNode } from './xyflow/CompoundNode'
22
- import { ElementNode } from './xyflow/ElementNode'
23
- import { RelationshipEdge } from './xyflow/RelationshipEdge'
24
-
25
- const nodeTypes = {
26
- element: ElementNode,
27
- compound: CompoundNode
28
- }
29
- const edgeTypes = {
30
- relation: RelationshipEdge
31
- }
32
-
33
- const resetDimmedAndHovered = (xyflow: ReactFlowInstance<SharedFlowTypes.Node, EdgeDetailsFlowTypes.Edge>) => {
34
- xyflow.setEdges(edges =>
35
- edges.map(edge => ({
36
- ...edge,
37
- data: {
38
- ...edge.data,
39
- dimmed: false,
40
- hovered: false
41
- },
42
- animated: false
43
- }))
44
- )
45
- xyflow.setNodes(nodes =>
46
- nodes.map(n =>
47
- ({
48
- ...n,
49
- data: {
50
- ...n.data,
51
- dimmed: false,
52
- hovered: false
53
- }
54
- }) as SharedFlowTypes.Node
55
- )
56
- )
57
- }
58
-
59
- const animateEdge = (node: SharedFlowTypes.Node, animated = true) => (edges: EdgeDetailsFlowTypes.Edge[]) => {
60
- return edges.map(edge => {
61
- const isConnected = edge.source === node.id || edge.target === node.id || isAncestor(node.id, edge.source)
62
- || isAncestor(node.id, edge.target)
63
- return {
64
- ...edge,
65
- animated: animated && isConnected
66
- }
67
- })
68
- }
69
-
70
- export const EdgeDetailsXYFlow = memo<{ edgeId: EdgeId }>(function EdgeDetailsXYFlow({ edgeId }) {
71
- const diagramStore = useDiagramStoreApi()
72
-
73
- const {
74
- view,
75
- edge,
76
- edges,
77
- nodes,
78
- bounds
79
- } = useLayoutedEdgeDetails(edgeId)
80
-
81
- const boundsRef = useSyncedRef(bounds)
82
-
83
- const xyflow = useReactFlow<SharedFlowTypes.Node, EdgeDetailsFlowTypes.Edge>()
84
- const xystore = useStoreApi<SharedFlowTypes.Node, EdgeDetailsFlowTypes.Edge>()
85
-
86
- const fitview = useDebouncedCallback(
87
- () => {
88
- const {
89
- width,
90
- height
91
- } = xystore.getState()
92
- const viewport = getViewportForBounds(
93
- {
94
- ...boundsRef.current,
95
- height: Math.max(boundsRef.current.height + 100, height - 200) // Add some padding to the bottom
96
- },
97
- width,
98
- height,
99
- 0.2,
100
- 1,
101
- 0.2
102
- )
103
- xyflow.setViewport(viewport, { duration: 350 })
104
- },
105
- [xyflow],
106
- 150
107
- )
108
-
109
- useEffect(() => {
110
- xyflow.setNodes(nodes)
111
- xyflow.setEdges(edges)
112
- }, [nodes, edges])
113
-
114
- const zoomable = true
115
-
116
- useUpdateEffect(() => fitview(), [edge.id])
117
-
118
- return (
119
- <ReactFlow
120
- defaultEdges={[] as EdgeDetailsFlowTypes.Edge[]}
121
- defaultNodes={[] as SharedFlowTypes.Node[]}
122
- nodeTypes={nodeTypes}
123
- edgeTypes={edgeTypes}
124
- defaultMarkerColor="var(--xy-edge-stroke)"
125
- zoomOnPinch={zoomable}
126
- zoomOnScroll={false}
127
- zoomOnDoubleClick={false}
128
- maxZoom={1.5}
129
- minZoom={0.1}
130
- fitView
131
- fitViewOptions={{
132
- padding: 0.2,
133
- maxZoom: 1,
134
- minZoom: 0.1,
135
- includeHiddenNodes: true
136
- }}
137
- preventScrolling={true}
138
- noDragClassName="nodrag"
139
- noPanClassName="nopan"
140
- panOnScroll
141
- panOnDrag
142
- elementsSelectable
143
- nodesFocusable={false}
144
- edgesFocusable={false}
145
- nodesDraggable={false}
146
- // onNodeMouseEnter={(_, node) => {
147
- // if (node.type === 'empty') return
148
- // xyflow.setEdges(animateEdge(node, true))
149
- // }}
150
- // onNodeMouseLeave={() => {
151
- // resetDimmedAndHovered(xyflow)
152
- // }}
153
- onEdgeMouseEnter={(_, edge) => {
154
- xyflow.setEdges(edges =>
155
- edges.map(e => ({
156
- ...e,
157
- data: {
158
- ...e.data,
159
- dimmed: e.id !== edge.id,
160
- hovered: e.id === edge.id
161
- },
162
- zIndex: e.id === edge.id ? ZIndexes.max : ZIndexes.edge,
163
- animated: e.id === edge.id
164
- }))
165
- )
166
- xyflow.setNodes(nodes =>
167
- nodes.map(n => ({
168
- ...n,
169
- data: {
170
- ...n.data,
171
- dimmed: n.id !== edge.source && n.id !== edge.target
172
- }
173
- } as SharedFlowTypes.Node))
174
- )
175
- }}
176
- onEdgeMouseLeave={() => {
177
- resetDimmedAndHovered(xyflow)
178
- }}
179
- // onNodeClick={(e, node) => {
180
- // e.stopPropagation()
181
- // if (node.type === 'empty') return
182
- // if (subject.id !== node.data.fqn) {
183
- // lastClickedNodeRef.current = node
184
- // }
185
- // overlay.openOverlay({
186
- // relationshipsOf: node.data.fqn
187
- // })
188
- // }}
189
- // onDoubleClick={e => {
190
- // e.stopPropagation()
191
- // xyflow.fitView({
192
- // includeHiddenNodes: true,
193
- // maxZoom: 1,
194
- // duration: 450
195
- // })
196
- // }}
197
- onEdgeClick={(e, edge) => {
198
- e.stopPropagation()
199
- // edge-details only ever deals with edges that represent only one relation
200
- let relationId = only(edge.data.relations)?.id
201
- if (relationId) {
202
- diagramStore.getState().onOpenSource?.({
203
- relation: relationId
204
- })
205
- }
206
- }}
207
- // onEdgeClick={(e, edge) => {
208
- // e.stopPropagation()
209
- // if (edge.data.relations.length <= 1) {
210
- // const relationId = only(edge.data.relations)?.id
211
- // if (relationId) {
212
- // diagramStore.getState().onOpenSourceRelation?.(relationId)
213
- // }
214
- // return
215
- // }
216
- // const nodeId = onlyOneUnique(edge.data, 'source') ? edge.source : edge.target
217
- // const next = xyflow.getNode(nodeId)
218
- // if (next && next.type !== 'empty') {
219
- // lastClickedNodeRef.current = next
220
- // overlay.openOverlay({
221
- // relationshipsOf: next.data.fqn
222
- // })
223
- // }
224
- // }}
225
- >
226
- <Panel position="top-center">
227
- <Group gap={'xs'} wrap={'nowrap'}>
228
- <SelectEdge
229
- view={view}
230
- edge={edge} />
231
- </Group>
232
- </Panel>
233
- <EdgeData edge={edge} top={bounds.height} width={bounds.width} />
234
- </ReactFlow>
235
- )
236
- })
237
-
238
- const EdgeData = ({ edge, top, width }: { edge: DiagramEdge; top: number; width: number }) => {
239
- return (
240
- <ViewportPortal>
241
- <Box
242
- maw={width}
243
- style={{
244
- transform: `translate(100px, ${top + 32}px)`
245
- }}>
246
- <Box className={css.edgeDataGrid}>
247
- <Text size="xs" fw={500} c="dimmed">technology</Text>
248
- <Text>{edge.technology || 'unknown'}</Text>
249
- <Text size="xs" fw={500} c="dimmed">description</Text>
250
- <Text>{edge.description || 'no description'}</Text>
251
- </Box>
252
- </Box>
253
- </ViewportPortal>
254
- )
255
- }
@@ -1,18 +0,0 @@
1
- import type { AddEdgeData } from '../../utils/types'
2
- import type { SharedFlowTypes } from '../shared/xyflow/_types'
3
-
4
- export namespace EdgeDetailsFlowTypes {
5
-
6
- /**
7
- * Data that is exclusive to the edge-details overlay. It will be merged into the edge types
8
- * provided by SharedFlowTypes.
9
- */
10
- type EdgeDetailsEdgeData = {
11
- technology: string | null
12
- description: string | null
13
- }
14
-
15
- // Extend the edge types provided by SharedFlowTypes with EdgeDetailsEdgeData
16
-
17
- export type Edge = AddEdgeData<SharedFlowTypes.Edge, EdgeDetailsEdgeData>
18
- }
@@ -1,72 +0,0 @@
1
- import { Handle, type NodeProps, Position } from '@xyflow/react'
2
- import clsx from 'clsx'
3
- import { m } from 'framer-motion'
4
- import type { SharedFlowTypes } from '../../shared/xyflow/_types'
5
- import * as css from './styles.css'
6
- import { Text } from '../../../controls/Text'
7
-
8
- type CompoundNodeProps = NodeProps<SharedFlowTypes.CompoundNode>
9
-
10
- export function CompoundNode({
11
- data: {
12
- element,
13
- ports,
14
- ...data
15
- },
16
- width = 200,
17
- selectable = true
18
- }: CompoundNodeProps) {
19
- return (
20
- <>
21
- <m.div
22
- className={clsx([
23
- css.compoundNodeBody,
24
- 'likec4-compound-node'
25
- ])}
26
- data-compound-depth={3}
27
- data-likec4-color={element.color}
28
- animate={{
29
- opacity: data.dimmed ? 0.15 : 1,
30
- transition: {
31
- delay: data.dimmed === true ? .4 : 0
32
- }
33
- }}
34
- {...(selectable && {
35
- whileHover: {
36
- scale: 1.04,
37
- transition: {
38
- delay: 0.15
39
- }
40
- },
41
- whileTap: {
42
- scale: 1
43
- }
44
- })}
45
- >
46
- <Text className={css.compoundNodeTitle} maw={width - 20}>{element.title}</Text>
47
- </m.div>
48
- {ports.out.map((id, i) => (
49
- <Handle
50
- key={id}
51
- id={id}
52
- type={'source'}
53
- position={Position.Right}
54
- style={{
55
- visibility: 'hidden',
56
- top: `${16 + 20 * i}px`
57
- }} />
58
- ))}
59
- {ports.in.map((id, i) => (
60
- <Handle
61
- key={id}
62
- id={id}
63
- type={'target'}
64
- position={Position.Left}
65
- style={{
66
- visibility: 'hidden',
67
- top: `${16 + 20 * i}px`
68
- }} />
69
- ))}
70
- </>
71
- )
72
- }
@@ -1,152 +0,0 @@
1
- import { ActionIcon, Box, Group } from '@mantine/core'
2
- import { IconFileSymlink, IconTransform, IconZoomScan } from '@tabler/icons-react'
3
- import { Handle, type NodeProps, Position } from '@xyflow/react'
4
- import clsx from 'clsx'
5
- import { m } from 'framer-motion'
6
- import { type DiagramState, useDiagramState } from '../../../hooks'
7
- import { ElementShapeSvg } from '../../../xyflow/nodes/element/ElementShapeSvg'
8
- import { stopPropagation } from '../../../xyflow/utils'
9
- import { useOverlayDialog } from '../../OverlayContext'
10
- import type { SharedFlowTypes } from '../../shared/xyflow/_types'
11
- import * as css from './styles.css'
12
- import { Text } from '../../../controls/Text'
13
-
14
- const Action = ActionIcon.withProps({
15
- className: 'nodrag nopan ' + css.navigateBtn,
16
- radius: 'md',
17
- role: 'button',
18
- onDoubleClick: stopPropagation,
19
- onPointerDownCapture: stopPropagation
20
- })
21
-
22
- type ElementNodeProps = NodeProps<SharedFlowTypes.ElementNode>
23
-
24
- function selector(s: DiagramState) {
25
- return {
26
- currentViewId: s.view.id,
27
- enableRelationshipBrowser: s.enableRelationshipBrowser,
28
- onNavigateTo: s.onNavigateTo,
29
- onOpenSource: s.onOpenSource
30
- }
31
- }
32
-
33
- export function ElementNode({
34
- data: {
35
- element,
36
- ports,
37
- navigateTo,
38
- ...data
39
- },
40
- selectable = true,
41
- width: w = 100,
42
- height: h = 100
43
- }: ElementNodeProps) {
44
- const overlay = useOverlayDialog()
45
- const {
46
- currentViewId,
47
- onNavigateTo,
48
- onOpenSource,
49
- enableRelationshipBrowser
50
- } = useDiagramState(selector)
51
- return (
52
- <>
53
- <m.div
54
- className={clsx([
55
- css.elementNode,
56
- 'likec4-element-node'
57
- ])}
58
- data-likec4-color={element.color}
59
- data-likec4-shape={element.shape}
60
- animate={{
61
- opacity: data.dimmed ? 0.15 : 1,
62
- transition: {
63
- delay: data.dimmed === true ? .4 : 0
64
- }
65
- }}
66
- {...(selectable && {
67
- whileHover: {
68
- scale: 1.045,
69
- transition: {
70
- delay: 0.15
71
- }
72
- },
73
- whileTap: {
74
- scale: 0.97
75
- }
76
- })}
77
- >
78
- <svg
79
- className={clsx(
80
- css.cssShapeSvg
81
- )}
82
- viewBox={`0 0 ${w} ${h}`}
83
- width={w}
84
- height={h}
85
- >
86
- <ElementShapeSvg shape={element.shape} w={w} h={h} />
87
- </svg>
88
- <Box className={css.elementNodeContent}>
89
- <Text className={css.elementNodeTitle} lineClamp={2}>{element.title}</Text>
90
- {element.description && (
91
- <Text className={css.elementNodeDescription} lineClamp={4}>{element.description}</Text>
92
- )}
93
- </Box>
94
- <Group className={css.navigateBtnBox}>
95
- {navigateTo && onNavigateTo && navigateTo !== currentViewId && (
96
- <Action
97
- onClick={(event) => {
98
- event.stopPropagation()
99
- overlay.close(() => onNavigateTo(navigateTo))
100
- }}>
101
- <IconZoomScan stroke={1.8} style={{ width: '75%' }} />
102
- </Action>
103
- )}
104
- {enableRelationshipBrowser && (
105
- <Action
106
- onClick={(event) => {
107
- event.stopPropagation()
108
- overlay.openOverlay({
109
- relationshipsOf: data.fqn
110
- })
111
- }}>
112
- <IconTransform stroke={1.8} style={{ width: '72%' }} />
113
- </Action>
114
- )}
115
- {onOpenSource && (
116
- <Action
117
- onClick={(event) => {
118
- event.stopPropagation()
119
- onOpenSource({
120
- element: data.fqn
121
- })
122
- }}>
123
- <IconFileSymlink stroke={1.8} style={{ width: '72%' }} />
124
- </Action>
125
- )}
126
- </Group>
127
- </m.div>
128
- {ports.out.map((id, i) => (
129
- <Handle
130
- key={id}
131
- id={id}
132
- type="source"
133
- position={Position.Right}
134
- style={{
135
- visibility: 'hidden',
136
- top: `${15 + (i + 1) * ((h - 30) / (ports.out.length + 1))}px`
137
- }} />
138
- ))}
139
- {ports.in.map((id, i) => (
140
- <Handle
141
- key={id}
142
- id={id}
143
- type="target"
144
- position={Position.Left}
145
- style={{
146
- visibility: 'hidden',
147
- top: `${15 + (i + 1) * ((h - 30) / (ports.in.length + 1))}px`
148
- }} />
149
- ))}
150
- </>
151
- )
152
- }