@likec4/diagram 1.19.1 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.css.js +1 -5
  3. package/dist/LikeC4Diagram.d.ts +1 -4
  4. package/dist/LikeC4Diagram.js +102 -147
  5. package/dist/LikeC4Diagram.props.d.ts +10 -16
  6. package/dist/LikeC4Search.js +7 -15
  7. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  8. package/dist/base/Background.d.ts +7 -0
  9. package/dist/{xyflow/XYFlowBackground.js → base/Background.js} +5 -6
  10. package/dist/base/BaseXYFlow.d.ts +14 -0
  11. package/dist/base/BaseXYFlow.js +146 -0
  12. package/dist/base/example/RelationshipsBrowser.d.ts +6 -0
  13. package/dist/base/example/_types.d.ts +20 -0
  14. package/dist/base/example/custom.d.ts +71 -0
  15. package/dist/base/example/useViewToNodesEdges.d.ts +6 -0
  16. package/dist/base/index.d.ts +2 -0
  17. package/dist/base/primitives/NodeHandles.d.ts +4 -0
  18. package/dist/base/primitives/NodeHandles.js +14 -0
  19. package/dist/base/primitives/compound/CompoundActionButton.css.d.ts +3 -0
  20. package/dist/base/primitives/compound/CompoundActionButton.css.js +9 -0
  21. package/dist/base/primitives/compound/CompoundActionButton.d.ts +7 -0
  22. package/dist/base/primitives/compound/CompoundActionButton.js +48 -0
  23. package/dist/base/primitives/compound/CompoundDetailsButton.css.d.ts +3 -0
  24. package/dist/base/primitives/compound/CompoundDetailsButton.css.js +9 -0
  25. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +7 -0
  26. package/dist/base/primitives/compound/CompoundDetailsButton.js +50 -0
  27. package/dist/base/primitives/compound/CompoundNodeContainer.css.d.ts +9 -0
  28. package/dist/base/primitives/compound/CompoundNodeContainer.css.js +17 -0
  29. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +26 -0
  30. package/dist/base/primitives/compound/CompoundNodeContainer.js +86 -0
  31. package/dist/base/primitives/compound/CompoundTitle.css.d.ts +2 -0
  32. package/dist/base/primitives/compound/CompoundTitle.css.js +7 -0
  33. package/dist/base/primitives/compound/CompoundTitle.d.ts +6 -0
  34. package/dist/base/primitives/compound/CompoundTitle.js +20 -0
  35. package/dist/base/primitives/customEdge.d.ts +41 -0
  36. package/dist/base/primitives/customEdge.js +13 -0
  37. package/dist/base/primitives/customNode.d.ts +7 -0
  38. package/dist/base/primitives/customNode.js +10 -0
  39. package/dist/base/primitives/edge/EdgeActionButton.d.ts +7 -0
  40. package/dist/base/primitives/edge/EdgeActionButton.js +24 -0
  41. package/dist/base/primitives/edge/EdgeContainer.d.ts +10 -0
  42. package/dist/base/primitives/edge/EdgeContainer.js +35 -0
  43. package/dist/{xyflow/edges/edges.css.d.ts → base/primitives/edge/EdgeLabel.css.d.ts} +5 -9
  44. package/dist/base/primitives/edge/EdgeLabel.css.js +25 -0
  45. package/dist/base/primitives/edge/EdgeLabel.d.ts +51 -0
  46. package/dist/base/primitives/edge/EdgeLabel.js +90 -0
  47. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.d.ts +2 -0
  48. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.js +29 -1
  49. package/dist/base/primitives/edge/EdgePath.d.ts +44 -0
  50. package/dist/base/primitives/edge/EdgePath.js +77 -0
  51. package/dist/base/primitives/edge/edge.css.d.ts +6 -0
  52. package/dist/base/primitives/edge/edge.css.js +14 -0
  53. package/dist/base/primitives/element/ElementActionButtons.css.d.ts +3 -0
  54. package/dist/base/primitives/element/ElementActionButtons.css.js +9 -0
  55. package/dist/base/primitives/element/ElementActionButtons.d.ts +13 -0
  56. package/dist/base/primitives/element/ElementActionButtons.js +62 -0
  57. package/dist/base/primitives/element/ElementDetailsButton.css.d.ts +3 -0
  58. package/dist/base/primitives/element/ElementDetailsButton.css.js +9 -0
  59. package/dist/base/primitives/element/ElementDetailsButton.d.ts +7 -0
  60. package/dist/base/primitives/element/ElementDetailsButton.js +54 -0
  61. package/dist/base/primitives/element/ElementNodeContainer.css.d.ts +3 -0
  62. package/dist/base/primitives/element/ElementNodeContainer.css.js +7 -0
  63. package/dist/base/primitives/element/ElementNodeContainer.d.ts +26 -0
  64. package/dist/base/primitives/element/ElementNodeContainer.js +60 -0
  65. package/dist/base/primitives/element/ElementShape.css.d.ts +6 -0
  66. package/dist/base/primitives/element/ElementShape.css.js +14 -0
  67. package/dist/base/primitives/element/ElementShape.d.ts +28 -0
  68. package/dist/{xyflow/nodes/element/ElementShapeSvg.js → base/primitives/element/ElementShape.js} +23 -7
  69. package/dist/base/primitives/element/ElementTitle.css.d.ts +8 -0
  70. package/dist/base/primitives/element/ElementTitle.css.js +19 -0
  71. package/dist/base/primitives/element/ElementTitle.d.ts +10 -0
  72. package/dist/base/primitives/element/ElementTitle.js +66 -0
  73. package/dist/base/primitives/index.d.ts +17 -0
  74. package/dist/base/types.d.ts +90 -0
  75. package/dist/base/types.js +54 -0
  76. package/dist/base/updateEdges.d.ts +3 -0
  77. package/dist/base/updateEdges.js +31 -0
  78. package/dist/base/updateNodes.d.ts +3 -0
  79. package/dist/base/updateNodes.js +36 -0
  80. package/dist/base/xyflowMachine.d.ts +212 -0
  81. package/dist/context/DiagramEventHandlers.d.ts +10 -0
  82. package/dist/context/DiagramEventHandlers.js +49 -0
  83. package/dist/context/DiagramFeatures.d.ts +31 -0
  84. package/dist/context/DiagramFeatures.js +140 -0
  85. package/dist/{ui → context}/FramerMotionConfig.js +2 -4
  86. package/dist/context/IconRenderer.d.ts +11 -0
  87. package/dist/{xyflow/nodes/shared/ElementIcon.js → context/IconRenderer.js} +14 -14
  88. package/dist/context/RootContainer.d.ts +9 -0
  89. package/dist/context/RootContainer.js +20 -0
  90. package/dist/context/index.d.ts +7 -0
  91. package/dist/globals.css.js +0 -87
  92. package/dist/hooks/index.d.ts +7 -5
  93. package/dist/hooks/useCurrentViewId.d.ts +2 -0
  94. package/dist/hooks/useCurrentViewId.js +8 -0
  95. package/dist/hooks/useDiagram.d.ts +10725 -0
  96. package/dist/hooks/useDiagram.js +119 -0
  97. package/dist/hooks/useDiagramActor.d.ts +5 -0
  98. package/dist/hooks/useDiagramActor.js +21 -0
  99. package/dist/hooks/useDiagramContext.d.ts +3 -0
  100. package/dist/hooks/useDiagramContext.js +10 -0
  101. package/dist/hooks/useMantinePortalProps.js +2 -2
  102. package/dist/hooks/useXYFlow.d.ts +195 -37
  103. package/dist/hooks/useXYFlow.js +4 -6
  104. package/dist/index.d.ts +3 -2
  105. package/dist/index.js +5 -6
  106. package/dist/likec4diagram/DiagramActor.d.ts +7 -0
  107. package/dist/likec4diagram/DiagramActor.js +71 -0
  108. package/dist/likec4diagram/DiagramUI.d.ts +2 -0
  109. package/dist/likec4diagram/DiagramUI.js +22 -0
  110. package/dist/likec4diagram/XYFlow.d.ts +6 -0
  111. package/dist/likec4diagram/XYFlow.js +122 -0
  112. package/dist/likec4diagram/custom/edges/NotePopover.css.d.ts +2 -0
  113. package/dist/likec4diagram/custom/edges/NotePopover.css.js +7 -0
  114. package/dist/likec4diagram/custom/edges/NotePopover.d.ts +4 -0
  115. package/dist/likec4diagram/custom/edges/NotePopover.js +101 -0
  116. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +55 -0
  117. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +307 -0
  118. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.js +4 -4
  119. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.d.ts +5 -5
  120. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.js +51 -53
  121. package/dist/likec4diagram/custom/edges/edges.css.d.ts +2 -0
  122. package/dist/likec4diagram/custom/edges/edges.css.js +7 -0
  123. package/dist/likec4diagram/custom/edges/utils.d.ts +22 -0
  124. package/dist/likec4diagram/custom/edges/utils.js +25 -0
  125. package/dist/likec4diagram/custom/index.d.ts +57 -0
  126. package/dist/likec4diagram/custom/index.js +7 -0
  127. package/dist/likec4diagram/custom/nodes/CompoundActions.d.ts +5 -0
  128. package/dist/likec4diagram/custom/nodes/CompoundActions.js +25 -0
  129. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +7 -0
  130. package/dist/likec4diagram/custom/nodes/ElementActions.js +69 -0
  131. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +10 -0
  132. package/dist/likec4diagram/custom/nodes/nodeTypes.js +94 -0
  133. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +21 -0
  134. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +159 -0
  135. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.d.ts +7 -0
  136. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +128 -0
  137. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.d.ts +7 -0
  138. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +149 -0
  139. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +8 -0
  140. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +66 -0
  141. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +40 -0
  142. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +131 -0
  143. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.d.ts +1 -0
  144. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +5 -0
  145. package/dist/likec4diagram/state/actorContext.d.ts +50849 -0
  146. package/dist/likec4diagram/state/actorContext.js +12 -0
  147. package/dist/{state → likec4diagram/state}/aligners.d.ts +4 -1
  148. package/dist/{state → likec4diagram/state}/aligners.js +31 -5
  149. package/dist/likec4diagram/state/assign.d.ts +18 -0
  150. package/dist/likec4diagram/state/assign.js +343 -0
  151. package/dist/likec4diagram/state/hotkeyActor.d.ts +5 -0
  152. package/dist/likec4diagram/state/hotkeyActor.js +18 -0
  153. package/dist/likec4diagram/state/inspector.d.ts +5 -0
  154. package/dist/likec4diagram/state/machine.d.ts +10751 -0
  155. package/dist/likec4diagram/state/machine.js +783 -0
  156. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +113 -0
  157. package/dist/likec4diagram/state/syncManualLayoutActor.js +178 -0
  158. package/dist/likec4diagram/state/utils.d.ts +8 -0
  159. package/dist/likec4diagram/state/utils.js +48 -0
  160. package/dist/likec4diagram/types.d.ts +74 -0
  161. package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.js +11 -10
  162. package/dist/likec4diagram/ui/controls/Controls.d.ts +2 -0
  163. package/dist/likec4diagram/ui/controls/Controls.js +102 -0
  164. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.d.ts +2 -0
  165. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +43 -0
  166. package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.js +11 -11
  167. package/dist/likec4diagram/ui/controls/NavigationButtons.d.ts +1 -0
  168. package/dist/likec4diagram/ui/controls/NavigationButtons.js +92 -0
  169. package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.js +2 -1
  170. package/dist/{ui/top-left → likec4diagram/ui/controls}/styles.css.d.ts +1 -1
  171. package/dist/likec4diagram/ui/controls/styles.css.js +17 -0
  172. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.js +11 -0
  173. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.d.ts +1 -0
  174. package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.js +3 -3
  175. package/dist/likec4diagram/ui/diagram-title/Link.d.ts +4 -0
  176. package/dist/likec4diagram/ui/index.d.ts +2 -0
  177. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +13 -0
  178. package/dist/likec4diagram/ui/notation/NotationPanel.d.ts +2 -0
  179. package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.js +23 -31
  180. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.js +4 -4
  181. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.js +19 -44
  182. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.d.ts +11 -6
  183. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.js +17 -12
  184. package/dist/likec4diagram/useViewToNodesEdges.d.ts +11 -0
  185. package/dist/likec4diagram/useViewToNodesEdges.js +245 -0
  186. package/dist/likec4model/index.d.ts +1 -1
  187. package/dist/likec4model/useLikeC4Model.d.ts +1 -11
  188. package/dist/likec4model/useLikeC4Model.js +1 -39
  189. package/dist/overlays/Overlays.js +61 -105
  190. package/dist/overlays/element-details/ElementDetailsCard.js +111 -116
  191. package/dist/overlays/element-details/TabPanelDeployments.js +4 -7
  192. package/dist/overlays/element-details/TabPanelRelationships.css.js +0 -2
  193. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  194. package/dist/overlays/element-details/TabPanelRelationships.js +35 -64
  195. package/dist/overlays/element-details/TabPanelStructure.d.ts +2 -2
  196. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  197. package/dist/overlays/overlay/Overlay.css.d.ts +2 -0
  198. package/dist/overlays/overlay/Overlay.css.js +93 -0
  199. package/dist/overlays/overlay/Overlay.d.ts +8 -0
  200. package/dist/overlays/overlay/Overlay.js +86 -0
  201. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +5 -0
  202. package/dist/overlays/relationship-details/RelationshipDetails.js +189 -0
  203. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.css.d.ts +1 -0
  204. package/dist/overlays/relationship-details/SelectEdge.css.js +17 -0
  205. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.d.ts +1 -1
  206. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.js +8 -8
  207. package/dist/overlays/relationship-details/_types.d.ts +36 -0
  208. package/dist/overlays/relationship-details/actor.d.ts +41 -0
  209. package/dist/overlays/relationship-details/actor.js +113 -0
  210. package/dist/overlays/relationship-details/custom/ElementActions.d.ts +5 -0
  211. package/dist/overlays/relationship-details/custom/ElementActions.js +33 -0
  212. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +49 -0
  213. package/dist/overlays/relationship-details/custom/edgeTypes.js +51 -0
  214. package/dist/overlays/relationship-details/custom/index.d.ts +2 -0
  215. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +39 -0
  216. package/dist/overlays/relationship-details/custom/nodeTypes.js +89 -0
  217. package/dist/overlays/relationship-details/custom/styles.css.d.ts +1 -0
  218. package/dist/overlays/relationship-details/hooks.d.ts +59 -0
  219. package/dist/overlays/relationship-details/hooks.js +46 -0
  220. package/dist/overlays/{edge-details/use-layouted-edge-details.d.ts → relationship-details/useLayoutedDetails.d.ts} +4 -6
  221. package/dist/overlays/{edge-details/use-layouted-edge-details.js → relationship-details/useLayoutedDetails.js} +68 -64
  222. package/dist/overlays/relationships-browser/-useRelationshipsView.d.ts +39 -0
  223. package/dist/overlays/relationships-browser/-useRelationshipsView.js +488 -0
  224. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +5 -0
  225. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +209 -0
  226. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.css.d.ts +1 -0
  227. package/dist/overlays/relationships-browser/SelectElement.css.js +9 -0
  228. package/dist/overlays/relationships-browser/SelectElement.d.ts +7 -0
  229. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.js +11 -7
  230. package/dist/overlays/relationships-browser/_types.d.ts +40 -0
  231. package/dist/overlays/relationships-browser/actor.d.ts +66 -0
  232. package/dist/overlays/relationships-browser/actor.js +159 -0
  233. package/dist/overlays/relationships-browser/custom/ElementActions.d.ts +5 -0
  234. package/dist/overlays/relationships-browser/custom/ElementActions.js +43 -0
  235. package/dist/overlays/relationships-browser/custom/EmptyNode.d.ts +5 -0
  236. package/dist/overlays/{relationships-of/xyflow → relationships-browser/custom}/EmptyNode.js +1 -3
  237. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +46 -0
  238. package/dist/overlays/relationships-browser/custom/edgeTypes.js +51 -0
  239. package/dist/overlays/relationships-browser/custom/index.d.ts +2 -0
  240. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +45 -0
  241. package/dist/overlays/relationships-browser/custom/nodeTypes.js +93 -0
  242. package/dist/overlays/relationships-browser/custom/styles.css.d.ts +1 -0
  243. package/dist/overlays/relationships-browser/custom/styles.css.js +5 -0
  244. package/dist/overlays/relationships-browser/hooks.d.ts +62 -0
  245. package/dist/overlays/relationships-browser/hooks.js +46 -0
  246. package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +10 -0
  247. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +160 -0
  248. package/dist/style.css +1 -1
  249. package/dist/theme-vars.css.js +1 -0
  250. package/dist/utils/index.d.ts +4 -0
  251. package/dist/{xyflow/utils.d.ts → utils/xyflow.d.ts} +4 -4
  252. package/dist/{xyflow/utils.js → utils/xyflow.js} +14 -20
  253. package/package.json +24 -21
  254. package/src/LikeC4Diagram.css.ts +21 -15
  255. package/src/LikeC4Diagram.props.ts +14 -21
  256. package/src/LikeC4Diagram.tsx +105 -150
  257. package/src/LikeC4Search.tsx +21 -28
  258. package/src/StaticLikeC4Diagram.tsx +0 -1
  259. package/src/{xyflow/XYFlowBackground.tsx → base/Background.tsx} +8 -8
  260. package/src/base/BaseXYFlow.tsx +200 -0
  261. package/src/{xyflow → base}/const.ts +1 -1
  262. package/src/base/example/RelationshipsBrowser.tsx +62 -0
  263. package/src/base/example/_types.ts +71 -0
  264. package/src/base/example/custom.tsx +58 -0
  265. package/src/base/example/useViewToNodesEdges.ts +193 -0
  266. package/src/base/index.ts +10 -0
  267. package/src/base/primitives/NodeHandles.tsx +18 -0
  268. package/src/base/primitives/compound/CompoundActionButton.css.ts +55 -0
  269. package/src/base/primitives/compound/CompoundActionButton.tsx +52 -0
  270. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +56 -0
  271. package/src/base/primitives/compound/CompoundDetailsButton.tsx +54 -0
  272. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +161 -0
  273. package/src/base/primitives/compound/CompoundNodeContainer.tsx +95 -0
  274. package/src/base/primitives/compound/CompoundTitle.css.ts +43 -0
  275. package/src/base/primitives/compound/CompoundTitle.tsx +29 -0
  276. package/src/base/primitives/customEdge.ts +32 -0
  277. package/src/base/primitives/customNode.ts +21 -0
  278. package/src/base/primitives/edge/EdgeActionButton.tsx +27 -0
  279. package/src/base/primitives/edge/EdgeContainer.tsx +48 -0
  280. package/src/base/primitives/edge/EdgeLabel.css.ts +196 -0
  281. package/src/base/primitives/edge/EdgeLabel.tsx +136 -0
  282. package/src/{xyflow → base/primitives/edge}/EdgeMarkers.tsx +29 -1
  283. package/src/base/primitives/edge/EdgePath.tsx +89 -0
  284. package/src/base/primitives/edge/edge.css.ts +122 -0
  285. package/src/base/primitives/element/ElementActionButtons.css.ts +48 -0
  286. package/src/base/primitives/element/ElementActionButtons.tsx +73 -0
  287. package/src/base/primitives/element/ElementDetailsButton.css.ts +54 -0
  288. package/src/base/primitives/element/ElementDetailsButton.tsx +59 -0
  289. package/src/base/primitives/element/ElementNodeContainer.css.ts +47 -0
  290. package/src/base/primitives/element/ElementNodeContainer.tsx +72 -0
  291. package/src/base/primitives/element/ElementShape.css.ts +134 -0
  292. package/src/{xyflow/nodes/element/ElementShapeSvg.tsx → base/primitives/element/ElementShape.tsx} +64 -19
  293. package/src/base/primitives/element/ElementTitle.css.ts +156 -0
  294. package/src/base/primitives/element/ElementTitle.tsx +76 -0
  295. package/src/base/primitives/index.ts +17 -0
  296. package/src/base/types.ts +169 -0
  297. package/src/base/updateEdges.ts +40 -0
  298. package/src/base/updateNodes.ts +46 -0
  299. package/src/base/xyflowMachine.ts +75 -0
  300. package/src/context/DiagramEventHandlers.tsx +53 -0
  301. package/src/context/DiagramFeatures.tsx +162 -0
  302. package/src/{ui → context}/FramerMotionConfig.tsx +2 -6
  303. package/src/context/IconRenderer.tsx +45 -0
  304. package/src/context/RootContainer.tsx +31 -0
  305. package/src/context/index.ts +14 -0
  306. package/src/globals.css.ts +32 -32
  307. package/src/hooks/index.ts +7 -5
  308. package/src/hooks/useCurrentViewId.ts +8 -0
  309. package/src/hooks/useDiagram.ts +129 -0
  310. package/src/hooks/useDiagramActor.ts +25 -0
  311. package/src/hooks/useDiagramContext.ts +11 -0
  312. package/src/hooks/useMantinePortalProps.ts +2 -2
  313. package/src/hooks/useXYFlow.ts +12 -38
  314. package/src/index.ts +3 -7
  315. package/src/likec4diagram/DiagramActor.tsx +79 -0
  316. package/src/likec4diagram/DiagramUI.tsx +28 -0
  317. package/src/likec4diagram/XYFlow.tsx +137 -0
  318. package/src/likec4diagram/custom/edges/NotePopover.css.ts +27 -0
  319. package/src/likec4diagram/custom/edges/NotePopover.tsx +96 -0
  320. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +355 -0
  321. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.ts +7 -7
  322. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.tsx +91 -70
  323. package/src/likec4diagram/custom/edges/edges.css.ts +39 -0
  324. package/src/likec4diagram/custom/edges/utils.ts +126 -0
  325. package/src/likec4diagram/custom/index.tsx +8 -0
  326. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +27 -0
  327. package/src/likec4diagram/custom/nodes/ElementActions.tsx +74 -0
  328. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +107 -0
  329. package/src/likec4diagram/custom/nodes/toolbar/ColorButton.tsx +175 -0
  330. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +122 -0
  331. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +140 -0
  332. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +77 -0
  333. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +143 -0
  334. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +9 -0
  335. package/src/likec4diagram/state/actorContext.ts +8 -0
  336. package/src/{state → likec4diagram/state}/aligners.ts +67 -40
  337. package/src/likec4diagram/state/assign.ts +384 -0
  338. package/src/likec4diagram/state/hotkeyActor.ts +20 -0
  339. package/src/likec4diagram/state/inspector.ts +23 -0
  340. package/src/likec4diagram/state/machine.ts +946 -0
  341. package/src/likec4diagram/state/syncManualLayoutActor.ts +219 -0
  342. package/src/likec4diagram/state/utils.ts +52 -0
  343. package/src/likec4diagram/types.ts +144 -0
  344. package/src/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.tsx +32 -28
  345. package/src/likec4diagram/ui/controls/Controls.tsx +107 -0
  346. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +46 -0
  347. package/src/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.tsx +16 -16
  348. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +83 -0
  349. package/src/{ui/top-left → likec4diagram/ui/controls}/_shared.ts +4 -3
  350. package/src/{ui/top-left → likec4diagram/ui/controls}/styles.css.ts +17 -17
  351. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.ts +11 -11
  352. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.tsx +6 -5
  353. package/src/likec4diagram/ui/diagram-title/Link.tsx +40 -0
  354. package/src/likec4diagram/ui/index.ts +2 -0
  355. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.css.ts +18 -18
  356. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.tsx +44 -44
  357. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.ts +16 -16
  358. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.tsx +29 -49
  359. package/src/{xyflow → likec4diagram}/useLayoutConstraints.ts +54 -43
  360. package/src/likec4diagram/useViewToNodesEdges.ts +297 -0
  361. package/src/likec4model/index.ts +0 -6
  362. package/src/likec4model/useLikeC4Model.ts +1 -43
  363. package/src/overlays/Overlays.tsx +201 -147
  364. package/src/overlays/element-details/ElementDetailsCard.css.ts +58 -58
  365. package/src/overlays/element-details/ElementDetailsCard.tsx +143 -128
  366. package/src/overlays/element-details/TabPanelDeployments.css.ts +14 -14
  367. package/src/overlays/element-details/TabPanelDeployments.tsx +22 -22
  368. package/src/overlays/element-details/TabPanelRelationships.css.ts +19 -19
  369. package/src/overlays/element-details/TabPanelRelationships.tsx +45 -28
  370. package/src/overlays/element-details/TabPanelStructure.css.ts +7 -7
  371. package/src/overlays/element-details/TabPanelStructure.tsx +11 -11
  372. package/src/overlays/overlay/Overlay.css.ts +73 -0
  373. package/src/overlays/overlay/Overlay.tsx +99 -0
  374. package/src/overlays/relationship-details/RelationshipDetails.tsx +234 -0
  375. package/src/overlays/{edge-details → relationship-details}/SelectEdge.css.ts +20 -13
  376. package/src/overlays/{edge-details → relationship-details}/SelectEdge.tsx +14 -14
  377. package/src/overlays/relationship-details/_types.ts +73 -0
  378. package/src/overlays/relationship-details/actor.ts +162 -0
  379. package/src/overlays/relationship-details/custom/ElementActions.tsx +45 -0
  380. package/src/overlays/relationship-details/custom/edgeTypes.tsx +49 -0
  381. package/src/overlays/relationship-details/custom/index.tsx +2 -0
  382. package/src/overlays/relationship-details/custom/nodeTypes.tsx +108 -0
  383. package/src/overlays/relationship-details/custom/styles.css.ts +13 -0
  384. package/src/overlays/relationship-details/hooks.ts +48 -0
  385. package/src/overlays/{edge-details/use-layouted-edge-details.ts → relationship-details/useLayoutedDetails.ts} +128 -114
  386. package/src/overlays/relationships-browser/-useRelationshipsView.ts +642 -0
  387. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +247 -0
  388. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.css.ts +12 -5
  389. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.tsx +19 -17
  390. package/src/overlays/relationships-browser/_types.ts +89 -0
  391. package/src/overlays/relationships-browser/actor.ts +224 -0
  392. package/src/overlays/relationships-browser/custom/ElementActions.tsx +44 -0
  393. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +18 -0
  394. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +49 -0
  395. package/src/overlays/relationships-browser/custom/index.tsx +2 -0
  396. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +109 -0
  397. package/src/overlays/relationships-browser/custom/styles.css.ts +13 -0
  398. package/src/overlays/relationships-browser/hooks.ts +48 -0
  399. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +209 -0
  400. package/src/utils/index.ts +15 -0
  401. package/src/{xyflow/utils.ts → utils/xyflow.ts} +22 -8
  402. package/dist/_virtual/_commonjsHelpers.js +0 -6
  403. package/dist/controls/Text.d.ts +0 -2
  404. package/dist/controls/Text.js +0 -7
  405. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +0 -1
  406. package/dist/controls/action-button-bar/ActionButtonBar.css.js +0 -5
  407. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +0 -9
  408. package/dist/controls/action-button-bar/ActionButtonBar.js +0 -100
  409. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +0 -10
  410. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +0 -9
  411. package/dist/controls/action-buttons/ActionButton.css.d.ts +0 -1
  412. package/dist/controls/action-buttons/ActionButton.css.js +0 -5
  413. package/dist/controls/action-buttons/ActionButton.d.ts +0 -9
  414. package/dist/controls/action-buttons/ActionButton.js +0 -66
  415. package/dist/controls/action-buttons/ActionButtons.d.ts +0 -12
  416. package/dist/controls/action-buttons/ActionButtons.js +0 -99
  417. package/dist/hooks/useDiagramState.d.ts +0 -6
  418. package/dist/hooks/useDiagramState.js +0 -27
  419. package/dist/overlays/OverlayContext.d.ts +0 -10
  420. package/dist/overlays/OverlayContext.js +0 -9
  421. package/dist/overlays/Overlays.css.d.ts +0 -3
  422. package/dist/overlays/Overlays.css.js +0 -7
  423. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +0 -5
  424. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +0 -185
  425. package/dist/overlays/edge-details/SelectEdge.css.js +0 -17
  426. package/dist/overlays/edge-details/_types.d.ts +0 -14
  427. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +0 -5
  428. package/dist/overlays/edge-details/xyflow/CompoundNode.js +0 -76
  429. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +0 -5
  430. package/dist/overlays/edge-details/xyflow/ElementNode.js +0 -159
  431. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +0 -3
  432. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +0 -84
  433. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +0 -9
  434. package/dist/overlays/edge-details/xyflow/styles.css.js +0 -21
  435. package/dist/overlays/index.d.ts +0 -1
  436. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +0 -5
  437. package/dist/overlays/relationships-of/RelationshipsOverlay.js +0 -193
  438. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +0 -19
  439. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +0 -290
  440. package/dist/overlays/relationships-of/SelectElement.css.js +0 -7
  441. package/dist/overlays/relationships-of/SelectElement.d.ts +0 -7
  442. package/dist/overlays/relationships-of/_types.d.ts +0 -28
  443. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +0 -22
  444. package/dist/overlays/relationships-of/use-layouted-relationships.js +0 -496
  445. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +0 -6
  446. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +0 -120
  447. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +0 -6
  448. package/dist/overlays/relationships-of/xyflow/ElementNode.js +0 -194
  449. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +0 -5
  450. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +0 -3
  451. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +0 -123
  452. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +0 -14
  453. package/dist/overlays/relationships-of/xyflow/styles.css.js +0 -24
  454. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +0 -4
  455. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +0 -12
  456. package/dist/overlays/shared/xyflow/_types.d.ts +0 -77
  457. package/dist/state/DiagramContext.d.ts +0 -1609
  458. package/dist/state/DiagramContext.js +0 -101
  459. package/dist/state/diagram-to-xyflow.d.ts +0 -11
  460. package/dist/state/diagram-to-xyflow.js +0 -113
  461. package/dist/state/diagramStore.d.ts +0 -1705
  462. package/dist/state/diagramStore.js +0 -808
  463. package/dist/state/diagramStore.layout.d.ts +0 -4
  464. package/dist/state/diagramStore.layout.js +0 -56
  465. package/dist/ui/DiagramTitlePanel.css.js +0 -11
  466. package/dist/ui/DiagramTitlePanel.d.ts +0 -1
  467. package/dist/ui/notation/NotationPanel.css.js +0 -16
  468. package/dist/ui/notation/NotationPanel.d.ts +0 -1
  469. package/dist/ui/top-left/TopLeftPanel.d.ts +0 -4
  470. package/dist/ui/top-left/TopLeftPanel.js +0 -211
  471. package/dist/ui/top-left/styles.css.js +0 -17
  472. package/dist/xyflow/FitviewOnDiagramChange.d.ts +0 -4
  473. package/dist/xyflow/FitviewOnDiagramChange.js +0 -72
  474. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +0 -1
  475. package/dist/xyflow/SelectEdgesOnNodeFocus.js +0 -96
  476. package/dist/xyflow/XYFlow.d.ts +0 -8
  477. package/dist/xyflow/XYFlow.js +0 -145
  478. package/dist/xyflow/XYFlowBackground.d.ts +0 -10
  479. package/dist/xyflow/XYFlowInner.d.ts +0 -8
  480. package/dist/xyflow/XYFlowInner.js +0 -41
  481. package/dist/xyflow/edges/EdgeLabel.d.ts +0 -7
  482. package/dist/xyflow/edges/EdgeLabel.js +0 -160
  483. package/dist/xyflow/edges/RelationshipEdge.d.ts +0 -6
  484. package/dist/xyflow/edges/RelationshipEdge.js +0 -443
  485. package/dist/xyflow/edges/edges.css.js +0 -37
  486. package/dist/xyflow/edges/utils.d.ts +0 -16
  487. package/dist/xyflow/edges/utils.js +0 -24
  488. package/dist/xyflow/nodes/AnimateVariants.d.ts +0 -1313
  489. package/dist/xyflow/nodes/AnimateVariants.js +0 -123
  490. package/dist/xyflow/nodes/Node.css.d.ts +0 -3
  491. package/dist/xyflow/nodes/Node.css.js +0 -9
  492. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -14
  493. package/dist/xyflow/nodes/compound/CompoundNode.css.js +0 -27
  494. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -6
  495. package/dist/xyflow/nodes/compound/CompoundNode.js +0 -216
  496. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  497. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -3
  498. package/dist/xyflow/nodes/element/ElementLink.d.ts +0 -6
  499. package/dist/xyflow/nodes/element/ElementNode.d.ts +0 -6
  500. package/dist/xyflow/nodes/element/ElementNode.js +0 -190
  501. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +0 -17
  502. package/dist/xyflow/nodes/element/element.css.d.ts +0 -18
  503. package/dist/xyflow/nodes/element/element.css.js +0 -31
  504. package/dist/xyflow/nodes/element/index.d.ts +0 -1
  505. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +0 -8
  506. package/dist/xyflow/nodes/shared/Toolbar.d.ts +0 -9
  507. package/dist/xyflow/nodes/shared/Toolbar.js +0 -436
  508. package/dist/xyflow/types.d.ts +0 -36
  509. package/dist/xyflow/useXYFlowEvents.d.ts +0 -160
  510. package/dist/xyflow/useXYFlowEvents.js +0 -275
  511. package/src/controls/Text.ts +0 -5
  512. package/src/controls/action-button-bar/ActionButtonBar.css.ts +0 -13
  513. package/src/controls/action-button-bar/ActionButtonBar.tsx +0 -138
  514. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +0 -13
  515. package/src/controls/action-buttons/ActionButton.css.ts +0 -29
  516. package/src/controls/action-buttons/ActionButton.tsx +0 -66
  517. package/src/controls/action-buttons/ActionButtons.tsx +0 -138
  518. package/src/hooks/useDiagramState.ts +0 -36
  519. package/src/overlays/OverlayContext.tsx +0 -11
  520. package/src/overlays/Overlays.css.ts +0 -136
  521. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +0 -255
  522. package/src/overlays/edge-details/_types.ts +0 -18
  523. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +0 -72
  524. package/src/overlays/edge-details/xyflow/ElementNode.tsx +0 -152
  525. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +0 -85
  526. package/src/overlays/edge-details/xyflow/styles.css.ts +0 -144
  527. package/src/overlays/index.tsx +0 -1
  528. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +0 -185
  529. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +0 -378
  530. package/src/overlays/relationships-of/_types.ts +0 -40
  531. package/src/overlays/relationships-of/use-layouted-relationships.ts +0 -699
  532. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +0 -124
  533. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +0 -194
  534. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +0 -19
  535. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +0 -127
  536. package/src/overlays/relationships-of/xyflow/styles.css.ts +0 -214
  537. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +0 -60
  538. package/src/overlays/shared/xyflow/_types.ts +0 -87
  539. package/src/state/DiagramContext.tsx +0 -107
  540. package/src/state/diagram-to-xyflow.ts +0 -150
  541. package/src/state/diagramStore.layout.ts +0 -66
  542. package/src/state/diagramStore.ts +0 -1099
  543. package/src/ui/top-left/TopLeftPanel.tsx +0 -220
  544. package/src/xyflow/FitviewOnDiagramChange.tsx +0 -83
  545. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +0 -106
  546. package/src/xyflow/XYFlow.tsx +0 -179
  547. package/src/xyflow/XYFlowInner.tsx +0 -48
  548. package/src/xyflow/edges/EdgeLabel.tsx +0 -193
  549. package/src/xyflow/edges/RelationshipEdge.tsx +0 -547
  550. package/src/xyflow/edges/edges.css.ts +0 -288
  551. package/src/xyflow/edges/utils.ts +0 -153
  552. package/src/xyflow/nodes/AnimateVariants.ts +0 -143
  553. package/src/xyflow/nodes/Node.css.ts +0 -44
  554. package/src/xyflow/nodes/compound/CompoundNode.css.ts +0 -258
  555. package/src/xyflow/nodes/compound/CompoundNode.tsx +0 -226
  556. package/src/xyflow/nodes/compound/index.ts +0 -1
  557. package/src/xyflow/nodes/element/ElementLink.css.ts +0 -67
  558. package/src/xyflow/nodes/element/ElementLink.tsx +0 -97
  559. package/src/xyflow/nodes/element/ElementNode.tsx +0 -208
  560. package/src/xyflow/nodes/element/element.css.ts +0 -369
  561. package/src/xyflow/nodes/element/index.ts +0 -1
  562. package/src/xyflow/nodes/shared/ElementIcon.tsx +0 -43
  563. package/src/xyflow/nodes/shared/Toolbar.tsx +0 -496
  564. package/src/xyflow/types.ts +0 -57
  565. package/src/xyflow/useXYFlowEvents.ts +0 -315
  566. /package/dist/{xyflow → base}/const.d.ts +0 -0
  567. /package/dist/{xyflow → base}/const.js +0 -0
  568. /package/dist/{ui → context}/EnsureMantine.d.ts +0 -0
  569. /package/dist/{ui → context}/EnsureMantine.js +0 -0
  570. /package/dist/{ui → context}/FramerMotionConfig.d.ts +0 -0
  571. /package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.d.ts +0 -0
  572. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.d.ts +0 -0
  573. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.d.ts +0 -0
  574. /package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.d.ts +0 -0
  575. /package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.d.ts +0 -0
  576. /package/dist/{ui → likec4diagram/ui/diagram-title}/Link.js +0 -0
  577. /package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.css.d.ts +0 -0
  578. /package/dist/{ui → likec4diagram/ui}/notation/index.d.ts +0 -0
  579. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.d.ts +0 -0
  580. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.d.ts +0 -0
  581. /package/src/{ui → context}/EnsureMantine.tsx +0 -0
  582. /package/src/{ui → likec4diagram/ui}/notation/index.ts +0 -0
@@ -0,0 +1,52 @@
1
+ import { ActionIcon, Box } from '@mantine/core'
2
+ import { IconZoomScan } from '@tabler/icons-react'
3
+ import clsx from 'clsx'
4
+ import { m } from 'framer-motion'
5
+ import { stopPropagation } from '../../../utils/xyflow'
6
+ import type { NodeProps } from '../../types'
7
+ import * as css from './CompoundActionButton.css'
8
+
9
+ type CompoundActionButtonProps = NodeProps & {
10
+ icon?: React.ReactNode
11
+ onClick: (e: React.MouseEvent) => void
12
+ }
13
+
14
+ export function CompoundActionButton({
15
+ data: {
16
+ hovered: isHovered = false,
17
+ },
18
+ icon,
19
+ onClick,
20
+ }: CompoundActionButtonProps) {
21
+ return (
22
+ <Box className={clsx(css.container, 'compound-action')}>
23
+ <Box
24
+ className={clsx('nodrag nopan', css.actionButton)}
25
+ component={m.div}
26
+ initial={false}
27
+ animate={{
28
+ scale: isHovered ? 1.2 : 1,
29
+ x: isHovered ? -1 : 0,
30
+ // y: isHovered ? -1 : 0,
31
+ }}
32
+ whileHover={{
33
+ scale: 1.35,
34
+ x: -1,
35
+ // y: 1,
36
+ }}
37
+ whileTap={{ scale: 1 }}
38
+ >
39
+ <ActionIcon
40
+ className={css.actionIcon}
41
+ size={'md'}
42
+ radius="md"
43
+ // Otherwise node receives click event and is selected
44
+ onClick={onClick}
45
+ onDoubleClick={stopPropagation}
46
+ >
47
+ {icon ?? <IconZoomScan stroke={2} />}
48
+ </ActionIcon>
49
+ </Box>
50
+ </Box>
51
+ )
52
+ }
@@ -0,0 +1,56 @@
1
+ import { createVar, globalStyle, style } from '@vanilla-extract/css'
2
+ import { vars } from '../../../theme-vars'
3
+
4
+ export const container = style({
5
+ position: 'absolute',
6
+ top: 2,
7
+ right: 2,
8
+ zIndex: 10,
9
+ })
10
+
11
+ const btnColor = createVar('navigateBtnColor')
12
+ globalStyle(`${container}`, {
13
+ vars: {
14
+ [btnColor]: vars.element.loContrast,
15
+ },
16
+ })
17
+ globalStyle(`:where([data-mantine-color-scheme='light'] [data-compound-transparent="true"]) ${container}`, {
18
+ vars: {
19
+ [btnColor]: vars.element.stroke,
20
+ },
21
+ })
22
+
23
+ export const actionIcon = style({
24
+ opacity: 0.4,
25
+ pointerEvents: 'all',
26
+ cursor: 'pointer',
27
+ color: `var(--_compound-title-color,${btnColor})`,
28
+ backgroundColor: 'var(--ai-bg)',
29
+ 'vars': {
30
+ '--ai-color-hover': vars.element.hiContrast,
31
+ '--ai-bg-idle': `color-mix(in srgb , ${vars.element.fill}, transparent 99%)`,
32
+ '--ai-bg': `var(--ai-bg-idle)`,
33
+ '--ai-bg-hover': `color-mix(in srgb , ${vars.element.fill} 65%, ${vars.element.stroke})`,
34
+ '--ai-hover': `color-mix(in srgb , ${vars.element.fill} 50%, ${vars.element.stroke})`,
35
+ },
36
+ boxShadow: '1px 1px 3px 0px transparent',
37
+ ':hover': {
38
+ opacity: 1,
39
+ boxShadow: '1px 1px 3px 0px rgba(0, 0, 0, 0.15)',
40
+ },
41
+ selectors: {
42
+ [`:where([data-mantine-color-scheme='light'] [data-compound-transparent="true"]) &`]: {
43
+ opacity: 0.6,
44
+ vars: {
45
+ '--ai-bg-hover': `color-mix(in srgb , ${vars.element.fill}, transparent 20%)`,
46
+ '--ai-hover': `color-mix(in srgb , ${vars.element.fill}, transparent 10%)`,
47
+ '--ai-bg': `color-mix(in srgb , ${vars.element.fill}, transparent 99%)`,
48
+ },
49
+ },
50
+ },
51
+ })
52
+
53
+ export const actionIconWrapper = style({
54
+ width: 'min-content',
55
+ height: 'min-content',
56
+ })
@@ -0,0 +1,54 @@
1
+ import { ActionIcon, Box } from '@mantine/core'
2
+ import { IconId } from '@tabler/icons-react'
3
+ import clsx from 'clsx'
4
+ import { m } from 'framer-motion'
5
+ import { stopPropagation } from '../../../utils/xyflow'
6
+ import type { NodeProps } from '../../types'
7
+ import * as css from './CompoundDetailsButton.css'
8
+
9
+ type CompoundDetailsButtonProps = NodeProps & {
10
+ icon?: React.ReactNode
11
+ onClick: (e: React.MouseEvent) => void
12
+ }
13
+
14
+ export function CompoundDetailsButton({
15
+ data: {
16
+ hovered: isHovered = false,
17
+ },
18
+ icon,
19
+ onClick,
20
+ }: CompoundDetailsButtonProps) {
21
+ return (
22
+ <Box className={clsx(css.container, 'details-button')} onClick={stopPropagation}>
23
+ <Box
24
+ component={m.div}
25
+ className={clsx('nodrag nopan', css.actionIconWrapper)}
26
+ initial={false}
27
+ style={{
28
+ originX: 0.45,
29
+ originY: 0.55,
30
+ }}
31
+ animate={isHovered
32
+ ? {
33
+ scale: 1.2,
34
+ }
35
+ : {
36
+ scale: 1,
37
+ }}
38
+ whileHover={{
39
+ scale: 1.42,
40
+ }}
41
+ whileTap={{ scale: 1.15 }}
42
+ >
43
+ <ActionIcon
44
+ className={css.actionIcon}
45
+ size={'md'}
46
+ radius="md"
47
+ onClick={onClick}
48
+ onDoubleClick={stopPropagation}>
49
+ {icon ?? <IconId stroke={1.8} style={{ width: '75%' }} />}
50
+ </ActionIcon>
51
+ </Box>
52
+ </Box>
53
+ )
54
+ }
@@ -0,0 +1,161 @@
1
+ import { rem } from '@mantine/core'
2
+ import { createVar, fallbackVar, globalStyle, keyframes, style } from '@vanilla-extract/css'
3
+ import { calc } from '@vanilla-extract/css-utils'
4
+ import { easings, mantine, transitions, vars, whereLight } from '../../../theme-vars'
5
+
6
+ export const varCompoundOpacity = createVar('opacity')
7
+ export const varBorderRadius = createVar('borderRadius')
8
+ export const varBorderTransparency = createVar('borderTransparency')
9
+ export const varBorderColor = createVar('border-color')
10
+ const varBorderWidth = createVar('border-width')
11
+
12
+ export const dimmed = style({})
13
+ globalStyle(`.react-flow__node:has(${dimmed})`, {
14
+ opacity: 0.25,
15
+ transition: 'opacity 600ms ease-in-out, filter 600ms ease-in-out',
16
+ transitionDelay: '200ms',
17
+ filter: `grayscale(0.85) ${fallbackVar(vars.safariAnimationHook, 'blur(1px)')}`,
18
+ willChange: 'opacity, filter',
19
+ })
20
+
21
+ export const container = style({
22
+ position: 'relative',
23
+ width: '100%',
24
+ height: '100%',
25
+ padding: 0,
26
+ margin: 0,
27
+ border: '0px solid transparent',
28
+ vars: {
29
+ [varBorderRadius]: '6px',
30
+ [varBorderWidth]: '3px',
31
+ },
32
+ })
33
+
34
+ const outlineColor = fallbackVar(
35
+ mantine.colors.primaryColors.outline,
36
+ mantine.colors.primaryColors.filled,
37
+ vars.element.stroke,
38
+ )
39
+
40
+ export const compoundBg = style({
41
+ borderRadius: varBorderRadius,
42
+ boxShadow: '0 4px 10px 0.5px rgba(0,0,0,0.1) , 0 2px 2px -1px rgba(0,0,0,0.4)',
43
+ padding: 0,
44
+ margin: 0,
45
+ transition: `all 250ms ${easings.inOut}`,
46
+ // backgroundClip: 'padding-box',
47
+ // overflow: 'hidden',
48
+ cursor: 'default',
49
+ selectors: {
50
+ [`:where(.react-flow__node.dragging) &`]: {
51
+ boxShadow: 'none',
52
+ },
53
+ ':where(.react-flow__node:focus-visible) &': {
54
+ transitionDuration: '0ms',
55
+ outline: `3px solid ${outlineColor}`,
56
+ outlineOffset: rem(1.5),
57
+ },
58
+ [`:where([data-compound-transparent="true"]) &`]: {
59
+ opacity: varCompoundOpacity,
60
+ borderWidth: calc(varBorderWidth).subtract('1px').toString(),
61
+ },
62
+ [`:where([data-compound-transparent="true"]:is([data-hovered="true"])) &`]: {
63
+ transitionDelay: '0.15s',
64
+ transitionDuration: '0.4s',
65
+ },
66
+ },
67
+ position: 'absolute',
68
+ top: 0,
69
+ left: 0,
70
+ width: '100%',
71
+ height: '100%',
72
+ pointerEvents: 'none',
73
+ border: '0px solid transparent',
74
+ background: vars.element.fill,
75
+ backgroundClip: 'padding-box',
76
+ })
77
+
78
+ globalStyle(`:where([data-mantine-color-scheme='dark'] [data-compound-transparent="true"])`, {
79
+ vars: {
80
+ ['--_compound-border-color']: `color-mix(in srgb, ${vars.compound.titleColor} 25%, ${vars.element.stroke})`,
81
+ },
82
+ })
83
+ globalStyle(`:where([data-mantine-color-scheme='light'] [data-compound-transparent="true"])`, {
84
+ vars: {
85
+ ['--_compound-title-color']: vars.element.stroke,
86
+ },
87
+ })
88
+
89
+ export const compoundBorder = style({
90
+ borderRadius: varBorderRadius,
91
+ padding: 0,
92
+ margin: 0,
93
+ transition: `all 250ms ${easings.inOut}`,
94
+ cursor: 'default',
95
+ position: 'absolute',
96
+ top: 0,
97
+ left: 0,
98
+ width: '100%',
99
+ height: '100%',
100
+ pointerEvents: 'none',
101
+ background: 'transparent',
102
+ borderStyle: 'dashed',
103
+ borderWidth: varBorderWidth,
104
+ borderColor: `color-mix(in srgb , ${varBorderColor}, transparent ${fallbackVar(varBorderTransparency, '5%')})`,
105
+ vars: {
106
+ [varBorderColor]: `var(--_compound-border-color,${vars.element.stroke})`,
107
+ },
108
+ })
109
+
110
+ const indicatorKeyframes = keyframes({
111
+ 'from': {
112
+ opacity: 0.6,
113
+ },
114
+ 'to': {
115
+ opacity: 0.3,
116
+ },
117
+ })
118
+
119
+ const indicatorStroke = createVar('indicator-stroke')
120
+ const indicatorStrokeWidth = createVar('indicator-stroke-width')
121
+ export const indicator = style({
122
+ position: 'absolute',
123
+ top: '0',
124
+ left: '0',
125
+ width: '100%',
126
+ height: '100%',
127
+ pointerEvents: 'none',
128
+ overflow: 'visible',
129
+ visibility: 'hidden',
130
+ vars: {
131
+ [indicatorStroke]: vars.element.loContrast,
132
+ [indicatorStrokeWidth]: '6',
133
+ },
134
+ selectors: {
135
+ ':where(.react-flow__node.selected:not(:focus-visible)) &': {
136
+ visibility: 'visible',
137
+ },
138
+ ':where(.react-flow__node:focus-within:not(.selected)) &': {
139
+ vars: {
140
+ [indicatorStroke]: `color-mix(in srgb, ${vars.element.stroke} 30%, ${vars.element.loContrast})`,
141
+ [indicatorStrokeWidth]: '8',
142
+ },
143
+ },
144
+ [`${whereLight} &`]: {
145
+ vars: {
146
+ [indicatorStroke]: `color-mix(in srgb, ${vars.element.stroke} 80%, #000)`,
147
+ },
148
+ },
149
+ },
150
+ })
151
+
152
+ globalStyle(`${indicator} rect`, {
153
+ stroke: indicatorStroke,
154
+ transformOrigin: 'center center',
155
+ strokeWidth: indicatorStrokeWidth,
156
+ animationDuration: '800ms',
157
+ animationName: indicatorKeyframes,
158
+ animationIterationCount: 'infinite',
159
+ animationDirection: 'alternate',
160
+ fill: 'none',
161
+ })
@@ -0,0 +1,95 @@
1
+ import type { DiagramNode } from '@likec4/core'
2
+ import { type BoxProps, Box, createPolymorphicComponent } from '@mantine/core'
3
+ import { assignInlineVars } from '@vanilla-extract/dynamic'
4
+ import clsx from 'clsx'
5
+ import { m } from 'framer-motion'
6
+ import { type PropsWithChildren, forwardRef } from 'react'
7
+ import { clamp, isNumber } from 'remeda'
8
+ import type { NodeProps } from '../../types'
9
+ import * as css from './CompoundNodeContainer.css'
10
+
11
+ type RequiredData = Pick<
12
+ DiagramNode,
13
+ | 'color'
14
+ | 'depth'
15
+ | 'shape'
16
+ | 'style'
17
+ >
18
+
19
+ type CompoundNodeContainerProps =
20
+ & BoxProps
21
+ & PropsWithChildren<{
22
+ nodeProps: NodeProps<RequiredData>
23
+ }>
24
+
25
+ export const CompoundNodeContainer = createPolymorphicComponent<'div', CompoundNodeContainerProps>(
26
+ forwardRef<HTMLDivElement, CompoundNodeContainerProps>(({
27
+ nodeProps: {
28
+ data: {
29
+ hovered: isHovered = false,
30
+ dimmed: isDimmed = false,
31
+ style,
32
+ ...data
33
+ },
34
+ },
35
+ children,
36
+ ...rest
37
+ }, ref) => {
38
+ const isTransparent = isNumber(style.opacity) && style.opacity < 100
39
+ let opacity = clamp((style.opacity ?? 100) / 100, {
40
+ min: 0,
41
+ max: 1,
42
+ })
43
+ if (isTransparent && isHovered) {
44
+ opacity = Math.min(opacity + 0.11, 1)
45
+ }
46
+ const MAX_TRANSPARENCY = 40
47
+ const borderTransparency = clamp(MAX_TRANSPARENCY - opacity * MAX_TRANSPARENCY, {
48
+ min: 0,
49
+ max: MAX_TRANSPARENCY,
50
+ })
51
+ return (
52
+ <Box
53
+ ref={ref}
54
+ component={m.div}
55
+ className={clsx([
56
+ css.container,
57
+ isDimmed && css.dimmed,
58
+ 'likec4-compound-node',
59
+ ])}
60
+ initial={false}
61
+ data-hovered={isHovered}
62
+ data-likec4-color={data.color}
63
+ data-compound-depth={data.depth ?? 1}
64
+ data-compound-transparent={isTransparent}
65
+ data-likec4-shape={data.shape}
66
+ style={assignInlineVars({
67
+ [css.varCompoundOpacity]: opacity.toFixed(2),
68
+ [css.varBorderTransparency]: `${borderTransparency}%`,
69
+ })}
70
+ {...rest}
71
+ >
72
+ <svg className={css.indicator}>
73
+ <rect
74
+ x={0}
75
+ y={0}
76
+ width={'100%'}
77
+ height={'100%'}
78
+ rx={6}
79
+ />
80
+ </svg>
81
+ <div className={css.compoundBg} />
82
+ {isTransparent && style.border !== 'none' && (
83
+ <div
84
+ className={css.compoundBorder}
85
+ style={{
86
+ borderStyle: style.border ?? 'dashed',
87
+ }}
88
+ />
89
+ )}
90
+ {children}
91
+ </Box>
92
+ )
93
+ }),
94
+ )
95
+ CompoundNodeContainer.displayName = 'CompoundNodeContainer'
@@ -0,0 +1,43 @@
1
+ import { rem } from '@mantine/core'
2
+ import { style } from '@vanilla-extract/css'
3
+ import { vars, whereLight } from '../../../theme-vars'
4
+
5
+ export const compoundTitle = style({
6
+ display: 'flex',
7
+ alignItems: 'center',
8
+ gap: 6,
9
+ paddingLeft: 14,
10
+ paddingTop: 6,
11
+ minHeight: 30,
12
+ paddingRight: 2,
13
+ selectors: {
14
+ [`:where(.react-flow__node.draggable) &`]: {
15
+ cursor: 'grab',
16
+ },
17
+ [`.likec4-compound-node:has(.compound-action) &`]: {
18
+ paddingLeft: 30,
19
+ },
20
+ },
21
+ })
22
+
23
+ export const title = style({
24
+ flex: 1,
25
+ fontFamily: vars.compound.font,
26
+ fontWeight: 600,
27
+ fontSize: rem(15),
28
+ textTransform: 'uppercase',
29
+ letterSpacing: '0.2px',
30
+ // lineHeight: 1,
31
+ //
32
+ color: `var(--_compound-title-color,${vars.compound.titleColor})`,
33
+ // paddingLeft: 0,
34
+ // paddingTop: 13,
35
+ // paddingBottom: 6,
36
+ // minHeight: 20,
37
+ mixBlendMode: 'screen',
38
+ selectors: {
39
+ [`${whereLight} &`]: {
40
+ mixBlendMode: 'darken',
41
+ },
42
+ },
43
+ })
@@ -0,0 +1,29 @@
1
+ import type { DiagramNode } from '@likec4/core'
2
+ import { Box, Text } from '@mantine/core'
3
+ import clsx from 'clsx'
4
+ import type { NodeProps } from '../../types'
5
+ import * as css from './CompoundTitle.css'
6
+
7
+ type Data = Pick<
8
+ DiagramNode,
9
+ | 'color'
10
+ | 'title'
11
+ >
12
+
13
+ type CompoundTitleProps = NodeProps<Data>
14
+
15
+ export function CompoundTitle({ data }: CompoundTitleProps) {
16
+ const isHovered = data.hovered ?? false
17
+
18
+ return (
19
+ <Box
20
+ className={clsx(
21
+ css.compoundTitle,
22
+ 'likec4-compound-title',
23
+ )}>
24
+ <Text className={css.title} truncate="end">
25
+ {data.title}
26
+ </Text>
27
+ </Box>
28
+ )
29
+ }
@@ -0,0 +1,32 @@
1
+ import { deepEqual as eq } from 'fast-equals'
2
+ import { type FunctionComponent, memo } from 'react'
3
+ import type { Base, EdgeProps } from '../types'
4
+
5
+ // If points are within 3px, consider them the same
6
+ const isSame = (a: number, b: number) => {
7
+ return Math.abs(a - b) < 2.5
8
+ }
9
+
10
+ export const edgePropsEqual = <P extends Record<string, unknown> = Base.EdgeData>(
11
+ prev: EdgeProps<P>,
12
+ next: EdgeProps<P>,
13
+ ) => (
14
+ prev.id === next.id
15
+ && eq(prev.source, next.source)
16
+ && eq(prev.sourceHandleId ?? null, next.sourceHandleId ?? null)
17
+ && eq(prev.target, next.target)
18
+ && eq(prev.targetHandleId ?? null, next.targetHandleId ?? null)
19
+ && eq(prev.selected ?? false, next.selected ?? false)
20
+ && isSame(prev.sourceX, next.sourceX)
21
+ && isSame(prev.sourceY, next.sourceY)
22
+ && isSame(prev.targetX, next.targetX)
23
+ && isSame(prev.targetY, next.targetY)
24
+ && eq(prev.data, next.data)
25
+ && eq(prev.style, next.style)
26
+ )
27
+
28
+ export function customEdge<P extends Record<string, unknown> = Base.NodeData>(
29
+ Edge: FunctionComponent<EdgeProps<P>>,
30
+ ) {
31
+ return memo(Edge, edgePropsEqual)
32
+ }
@@ -0,0 +1,21 @@
1
+ import { deepEqual as eq } from 'fast-equals'
2
+ import { type FunctionComponent, memo } from 'react'
3
+ import type { Base, NodeProps } from '../types'
4
+
5
+ export const nodePropsEqual = <P extends Record<string, unknown> = Base.NodeData>(
6
+ prev: NodeProps<P>,
7
+ next: NodeProps<P>,
8
+ ) => (
9
+ prev.id === next.id
10
+ && eq(prev.selected ?? false, next.selected ?? false)
11
+ && eq(prev.dragging ?? false, next.dragging ?? false)
12
+ && eq(prev.width ?? 0, next.width ?? 0)
13
+ && eq(prev.height ?? 0, next.height ?? 0)
14
+ && eq(prev.data, next.data)
15
+ )
16
+
17
+ export function customNode<P extends Record<string, unknown> = Base.NodeData>(
18
+ Node: FunctionComponent<NodeProps<P>>,
19
+ ) {
20
+ return memo(Node, nodePropsEqual)
21
+ }
@@ -0,0 +1,27 @@
1
+ import { ActionIcon } from '@mantine/core'
2
+ import { IconZoomScan } from '@tabler/icons-react'
3
+ import clsx from 'clsx'
4
+ import { stopPropagation } from '../../../utils/xyflow'
5
+ import type { EdgeProps } from '../../types'
6
+ import * as css from './EdgeLabel.css'
7
+
8
+ type EdgeActionBtnProps = EdgeProps & {
9
+ icon?: React.ReactNode
10
+ onClick: (e: React.MouseEvent) => void
11
+ }
12
+
13
+ export function EdgeActionButton({ icon, onClick }: EdgeActionBtnProps) {
14
+ return (
15
+ <ActionIcon
16
+ className={clsx('nodrag nopan', css.actionBtn)}
17
+ size={'sm'}
18
+ radius="sm"
19
+ onPointerDownCapture={stopPropagation}
20
+ onClick={onClick}
21
+ role="button"
22
+ onDoubleClick={stopPropagation}
23
+ >
24
+ {icon ?? <IconZoomScan />}
25
+ </ActionIcon>
26
+ )
27
+ }
@@ -0,0 +1,48 @@
1
+ import type { DiagramEdge } from '@likec4/core'
2
+ import clsx from 'clsx'
3
+ import { type PropsWithChildren } from 'react'
4
+ import type { UndefinedOnPartialDeep } from 'type-fest'
5
+ import type { EdgeProps } from '../../types'
6
+ import * as css from './edge.css'
7
+
8
+ type Data = UndefinedOnPartialDeep<
9
+ Pick<
10
+ DiagramEdge,
11
+ | 'dir'
12
+ | 'color'
13
+ >
14
+ >
15
+
16
+ type EdgeContainerProps = PropsWithChildren<
17
+ EdgeProps<Data> & {
18
+ className?: string | undefined
19
+ }
20
+ >
21
+
22
+ export function EdgeContainer({
23
+ className,
24
+ data: {
25
+ hovered: isHovered = false,
26
+ active: isActive = false,
27
+ dimmed: isDimmed = false,
28
+ ...data
29
+ },
30
+ children,
31
+ }: EdgeContainerProps) {
32
+ return (
33
+ <g
34
+ className={clsx(
35
+ css.edgeVars,
36
+ isDimmed && css.dimmed,
37
+ className,
38
+ )}
39
+ data-likec4-color={data.color ?? 'gray'}
40
+ data-edge-dir={data.dir ?? 'forward'}
41
+ data-edge-active={isActive}
42
+ data-edge-animated={isActive}
43
+ data-edge-hovered={isHovered}
44
+ data-edge-dimmed={isDimmed}>
45
+ {children}
46
+ </g>
47
+ )
48
+ }